题目链接:59.螺旋矩阵 II
思路
每次按照 相同的规律 处理角落即可。
举例
5*5的矩阵我们每次处理一圈。
在一圈的处理过程中,每次每行(每列)处理前面几个,留下最后一个留作下次处理的开始
如图
如果n为奇数,还需要处理最中间的方格
按照需求编码即可
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int x = 0;
for (int k = 0; k < n/2; ++k) {
int i = k, j = k;
for (; j < n-k-1; ++j) res[i][j] = ++x;
for (; i < n-k-1; ++i) res[i][j] = ++x;
for (; j > k; --j) res[i][j] = ++x;
for (; i > k; --i) res[i][j] = ++x;
}
if (n&1) res[n/2][n/2] = ++x;
return res;
}
};