LeetCode59. 螺旋矩阵 II

代码

 1 class Solution {
 2 public:
 3     vector<vector<int>> generateMatrix(int n) {
 4         
 5         int startx = 0,starty = 0; //每个loop起始位置
 6         int loop = n / 2; //循环次数,n为奇数要另外考虑中心位置
 7         int count = 1; //矩阵元素,从1—n2
 8         int offset = 1; //控制每层循环的边长变化
 9 
10         //用vector生成二维数组
11         vector<vector<int>> res (n);
12         for(int i = 0;i < n;i++)
13             res[i].resize(n);
14         
15         while(loop--){
16             int i = startx;
17             int j = starty;
18 
19             //上边:从左到右
20             for(; j < starty + n - offset;j++)
21                 res[startx][j] = count++;
22             //右边:从上到下
23             for(; i < startx + n - offset;i++ )
24                 res[i][j] = count++;
25             //下边:从右到左
26             for(;j > starty;j--)
27                 res[i][j] = count++;
28             //左边:从下到上
29             for(;i > startx;i--)
30                 res[i][j] = count++;
31             
32             startx++; starty++;
33             offset += 2;
34         }
35         if(n%2 != 0) res[n/2][n/2] = n*n;
36         
37         return res;
38     }
39 };

将整个矩阵的起点设为坐上角,该点为坐标原点,然后水平向右为x轴,竖直向下为y轴。一定要按照一定的顺序去写(顺时针),并且要遵循循环不变量原则,每一条边的遍历范围为左闭右开。

 

posted @ 2021-01-22 11:50  Uitachi  阅读(55)  评论(0编辑  收藏  举报