给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/spiral-matrix-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题细节方面错了很多次。
对于if判断语句的限制条件如下
1.行列不能走出边界
2.在最外围的直接执行
3.不在最外围的,因为是顺时针走,若向下走,那么满足两个条件:a.下面的元素为0。b.右边的元素不为0。其它同理。
代码如下
1 vector<vector<int>> generateMatrix(int n) { 2 vector<vector<int>> res(n, vector<int>(n,0)); 3 int num = 1; 4 int row = 0, col = 0; 5 while (num <= n * n) 6 { 7 res[row][col] = num; 8 if (col<n-1 && (row==0 || (res[row][col+1]==0 && (row-1>=0 && res[row-1][col] != 0)))) 9 { 10 ++col; 11 } 12 else if (row <n - 1 &&(col==n-1 || (res[row+1][col] == 0 && (col+1<=n-1 && res[row][col+1]!=0 )))) 13 { 14 ++row; 15 } 16 else if (col >0 && (row==n-1|| (res[row][col-1] == 0&&(row+1<=n-1&& res[row+1][col]!=0)))) 17 { 18 --col; 19 } 20 else if (row >0 &&(col==0||( res[row-1][col] == 0 && (col-1>=0 && res[row][col-1]!=0)))) 21 { 22 --row; 23 } 24 ++num; 25 } 26 return res; 27 }