题目
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解法
将上下左右作为记录索引工具
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n);
for(int i = 0; i < n; i++) {
res[i].resize(n);
}
int left = 0;
int right = n-1;
int up = 0;
int down = n-1;
int num = 1;
while(true) {
//上
for(int i = left; i <= right; i++) res[up][i] = num++;
if(up++ >= down) break;
//右
for(int i = up; i <=down ; i++) res[i][right] = num++;
if(right-- <= left) break;
//下
for(int i = right; i >= left; i--) res[down][i] = num++;
if(down-- <= up) break;
//左
for(int i = down; i >= up; i--) res[i][left] = num++;
if(left++ >= right) break;
}
return res;
}
};