题目描述:
Given an integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order.
Notice
Example
题目思路:
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
这题的思路在于不断缩小上下左右的boundary,而不用每次都计算position这么复杂。需要注意的是,循环终止的条件不是转完一圈才退出,一旦检测到count达到了n*n,就可以break。
Mycode(AC = 29ms):
class Solution {
public:
/**
* @param n an integer
* @return a square matrix
*/
vector<vector<int>> generateMatrix(int n) {
// Write your code here
vector<vector<int>> sp_matrix(n, vector<int>(n, 0));
int count = 1,
upper_row = 0,
down_row = n - 1,
left_col = 0,
right_col = n - 1;
while (count <= n * n) {
// fill in upper row
for (int i = left_col; i <= right_col; i++) {
sp_matrix[upper_row][i] = count++;
}
upper_row++;
if (count > n * n) break;
// fill in right col
for (int i = upper_row; i <= down_row; i++) {
sp_matrix[i][right_col] = count++;
}
right_col--;
if (count > n * n) break;
// fill in down row
for (int i = right_col; i >= left_col; i--) {
sp_matrix[down_row][i] = count++;
}
down_row--;
if (count > n * n) break;
// fill in left col
for (int i = down_row; i >= upper_row; i--) {
sp_matrix[i][left_col] = count++;
}
left_col++;
}
return sp_matrix;
}
};
本文介绍了一种高效生成螺旋矩阵的方法,通过不断调整边界而非计算位置的方式填充矩阵,实现了从1到n^2的元素按螺旋顺序排列。文章提供了一个通过AC测试的C++实现案例。
395

被折叠的 条评论
为什么被折叠?



