代码
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轴。一定要按照一定的顺序去写(顺时针),并且要遵循循环不变量原则,每一条边的遍历范围为左闭右开。