力扣算法题—059螺旋矩阵

给定一个正整数 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 }

 

posted @ 2019-04-03 17:07  自由之翼Az  阅读(147)  评论(0编辑  收藏  举报