题目链接
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
不要真的去循环着写啊,会把自己绕晕的。
参考这样的思路:对于每一圈都
- 从左到右去写最上面的行
- 从上到下去写最右边的列
- 从右到左去写最下面的行
- 从下到上去写最左边的列
从最外侧往内侧去写,直到写完最中心的数。
对于数组的操作,其实都是双指针的灵活应用。
这个题目写的时候,注意一下边界问题和n是奇数的情况就好,建议读到这里先停下,自己去实现一下。
下面是c++的代码。
vector> generateMatrix(int n) { int l = 0; int r = n - 1; //设置 r和l 两个指针来缩小轮廓 int m = 1; //用m来计数填充 vector > nums(n, vector (n, 0)); //矩阵是n*n while(l < r){ for(int i = l; i < r ;i ++){ nums[l][i] = m++; } for(int i = l; i < r ;i ++){ nums[i][r] = m++; } for(int i = r; i > l ;i--){ nums[r][i] = m++; } for(int i = r; i > l ;i--){ nums[i][l] = m++; } l++; r--; } if(r == l){ nums[n / 2][n / 2] = n * n; //如果n是基数的话,中间位置依靠循环填充不进去,需要单独填充 } return nums; }



