leetcode:59. 螺旋矩阵 II
题目
给你一个正整数 n
,生成一个包含 1
到 所有元素,且元素按顺时针顺序螺旋排列的
n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
解答 & 代码
思路同:
[中等] 54. 螺旋矩阵
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n));
int up = 0; // 上边界
int down = n - 1; // 下边界
int left = 0; // 左边界
int right = n - 1; // 右边界
int cnt = 1; // 当前的数值
// 螺旋遍历矩阵的每个位置
while(cnt <= n * n)
{
if(up <= down)
{
for(int j = left; j <= right; ++j) // 从左往右遍历上边界
{
matrix[up][j] = cnt;
++cnt;
}
++up; // 上边界收缩(下移)
}
if(right >= left)
{
for(int i = up; i <= down; ++i) // 从上往下遍历右边界
{
matrix[i][right] = cnt;
++cnt;
}
--right; // 右边界收缩(左移)
}
if(down >= up)
{
for(int j = right; j >= left; --j) // 从右往左遍历下边界
{
matrix[down][j] = cnt;
++cnt;
}
--down; // 下边界收缩(上移)
}
if(left <= right)
{
for(int i = down; i >= up; --i) // 从下往上遍历左边界
{
matrix[i][left] = cnt;
++cnt;
}
++left; // 左边界收缩(右移)
}
}
return matrix;
}
};
复杂度分析:要生成 n*n 的矩阵
- 时间复杂度
:
- 空间复杂度 O(1):结果矩阵不计
执行结果:
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了 36.83% 的用户