一、运行结果
二、题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
三、思路
设置四个变量作为四个边界,分别为top, right, bottom, left,从最左上角的格子开始进行顺时针遍历,先从左到右填最上边的行,再从上到下填最右边的列,然后从右到左填最下边的行,最后从下到上填最左边的列,每填完一行或一列,相应的边界值就往中间移,用一个变量curnum 记录当前格子应该填入的值,每填一个值就加一,重复上述操作直至填满整个矩阵。
四、代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n, vector<int>(n));
int top = 0, left = 0, bottom = n-1, right = n -1; //四边界
int curnum = 1; //每个格子填入的数字
while(top <= bottom && left <= right){
for(int i=left; i<=right; i++){ //上边 左→右
ans[top][i] = curnum;
curnum++;
}
top++; //上边界下移
for(int i=top; i<=bottom; i++){ //右边 上→下
ans[i][right] = curnum;
curnum++;
}
right--; //右边界左移
for(int i=right; i>=left; i--){ //下边 右->左
ans[bottom][i] = curnum;
curnum++;
}
bottom--; //下边界上移
for(int i=bottom; i>=top; i--){ //左边 下→上
ans[i][left] = curnum;
curnum++;
}
left++; //左边界右移
}
return ans;
}
};