题目描述
给定一个正整数 n,生成一个包含 1 1 1 到 n 2 n^2 n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解题思路
54题的改进版,此处为生成矩阵,思路一致。
参考代码
在54题代码的基础上改进
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
if(n <= 0)
return vector<vector<int> >();
vector<vector<int> > matrix(n, vector<int>(n, 0));
int rows = n;
int cols = n;
int num = 1;
for(int start = 0; start*2 < rows && start*2 < cols; start++){ // 用&&
generateMatrixClockwise(matrix, rows, cols, start, num);
}
return matrix;
}
void generateMatrixClockwise(vector<vector<int> > &matrix, int rows, int cols, int start, int &num){
int endX = cols - 1 - start;
int endY = rows - 1 - start;
for(int j = start; j <= endX; j++){
matrix[start][j] = num++;
}
if(endY-start > 0){
for(int i = start+1; i <= endY; i++){
matrix[i][endX] = num++;
}
}
if(endX-start > 0 && endY-start > 0){
for(int j = endX-1; j>=start; j--){
matrix[endY][j] = num++;
}
}
if(endX-start > 0 && endY-start > 1){
for(int i = endY-1; i > start; i--){
matrix[i][start] = num++;
}
}
}
};