题目链接:https://leetcode-cn.com/problems/spiral-matrix-ii/
题目描述
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路
思路与54题基本相同
leetcode 54 螺旋矩阵题解
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n,0));
int round = n;
int num = 1; // 当前需要打印数字
for (int i = 0; i*2 < n ; ++i) {
printCircle(matrix, i, num);
}
return matrix;
}
private:
void printCircle(vector<vector<int>>& matrix, int index, int& num){
int rows = matrix.size(), cols = matrix[0].size();
int endX = rows - 1 - index; // 终止横坐标
int endY = cols - 1 - index; // 终止纵坐标
// 从左往右
for (int j = index; j <= endY; ++j)
matrix[index][j] = num++;
// 从上到下
// 需要第二步条件:终止行号大于起始行号;圈内至少两行
if(index < endX){
for (int i = index+1; i <= endX; ++i) {
matrix[i][endY] = num++;
}
}
// 从右到左
// 需要第三步条件:终止行号大于起始行号;圈内至少两行两列
// 需要第四步条件:圈内至少三行两列
if(endX>index && endY > index){
for (int j = endY-1; j >= index ; --j) {
matrix[endX][j] = num++;
}
}
// 从下到上
// 需要第四步条件:圈内至少三行两列;
if(endX -1 > index && endY > index){
for (int i = endX -1; i >= index+1 ; --i) {
matrix[i][index] = num++;
}
}
}
};