对于这种螺旋遍历的方法,重要的是要确定上下左右四条边界的位置。
代码如下:
class Solution {
public:
vector> generateMatrix(int n) {
vector> res(n, vector (n)); //需要对res进行初始化
int up = 0, down = n-1; //螺旋矩阵的上下边界
int left = 0, right = n-1; //螺旋矩阵的左右边界
int i = 1;
while(true){
//上方元素
for(int j = left; j <= right && i <= n*n; j++){
res[up][j] = i;
i++;
}
if(up++ > down) break; //更新上边界并判断
//右方元素
for(int j = up; j <= down && i <= n*n; j++){
res[j][right] = i;
i++;
}
if(right-- < left) break; //更新右边界并判断
//下方元素
for(int j = right; j >=left && i <= n*n; j--){
res[down][j] = i;
i++;
}
if(down-- < up) break; //更新下边界并判断
//左方元素
for(int j = down; j >= up && i <= n*n; j--){
res[j][left] = i;
i++;
}
if(left++ > right) break; //更新左边界并判断
}
return res;
}
};