文章目录
leetcode59:59. 螺旋矩阵 II
题目描述
给定一个正整数 n
,生成一个包含 1
到
n
2
n^2
n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
Example
输入:3
输出:[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
solution idea
按层模拟
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<int> zero(n,0);
vector<vector<int>> res(n,zero);
int r1=0,r2=n-1,c1=0,c2=n-1;//(r1,c1),(r2,c2)当前层左上角、右下角
int i=1;
while(r1<=r2 && c1<=c2)
{
for(int c=c1;c<=c2;c++) {res[r1][c]=i; i++;}
for(int r=r1+1;r<=r2;r++) {res[r][c2]=i; i++;}
if(r1<r2 && c1<c2)
{
for(int c=c2-1;c>c1;c--) {res[r2][c]=i; i++;}
for(int r=r2;r>r1;r--) {res[r][c1]=i; i++;}
}
c1++;
c2--;
r1++;
r2--;
}
return res;
}
};
参考文献
- c++ prime 第5版