给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
1 #include "_000库函数.h" 2 3 //与上题螺旋矩阵输出数组一样 4 //一个时输出,一个是输入 5 class Solution { 6 public: 7 vector<vector<int>> generateMatrix(int n) { 8 vector<vector<int>>res(n, vector<int>(n, 0)); 9 int u = 0, d = n - 1, l = 0, r = n - 1; 10 int num = 1; 11 while (num <= n * n) { 12 for (int j = l; j <= r; ++j)res[u][j] = num++;//左向右行 13 if (++u > d)break; 14 for (int i = u; i <= d; ++i)res[i][r] = num++;//上向下列 15 if (--r < l)break; 16 for (int j = r; j >= l; --j)res[d][j] = num++;//右向左行 17 if (--d < u)break; 18 for (int i = d; i >= u; --i)res[i][l] = num++;//下向上列 19 if (++l > r)break; 20 } 21 return res; 22 23 } 24 }; 25 26 void T059() { 27 vector<vector<int>>res; 28 Solution s; 29 res = s.generateMatrix(3); 30 for (auto &a : res) { 31 for (auto b : a) 32 cout << b << " "; 33 cout << endl; 34 } 35 cout << "*****************" << endl; 36 37 res = s.generateMatrix(4); 38 for (auto &a : res) { 39 for (auto b : a) 40 cout << b << " "; 41 cout << endl; 42 } 43 cout << "*****************" << endl; 44 45 46 }