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