仅供自己学习
思路:
同样设置上下左右边界,因为是n*n的方阵,所以右边界和下边界为n-1。同时定义一个count=1用来给每个方阵赋值。
从左上角开始螺旋遍历,第一个for从左边界移动到右边界,然后上边界+1。第二个for从上边界移动到下边界,然后右边界-1,再从右边界移动到左边界,下边界-1,再从下边界移动到上边界,然后左边界+1.循环结束的条件是 count<=n*n。
代码:
1 class Solution { 2 public: 3 vector<vector<int>> generateMatrix(int n) { 4 int t=0; 5 int d=n-1; 6 int l=0; 7 int r=n-1; 8 vector<vector<int>> res(n,vector<int>(n)); 9 int count=1; 10 while(count<=n*n){ 11 for(int i=l;i<=r;++i) res[t][i]=count++; 12 if(++t>d) break; 13 for(int i=t;i<=d;++i) res[i][r]=count++; 14 if(--r<l) break; 15 for(int i=r;i>=l;--i) res[d][i]=count++; 16 if(--d<t) break; 17 for(int i=d;i>=t;--i) res[i][l]=count++; 18 if(++l>r) break; 19 } 20 return res; 21 } 22 };