题目描述:
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
通过次数
361.6K
提交次数
503.1K
通过率
71.9%
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
通过次数
361.6K
提交次数
503.1K
通过率
71.9%
思路和题解:
与第54题一样的方法,也是从最外层到最里层的方法,第54题是矩阵生成序列,这个是序列生成矩阵。螺旋矩阵
代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n,vector<int>(n,0));
int up=0,down=n-1,right=n-1,left=0;
int num=1;
while(true)
{
for(int i=left;i<=right;i++)
{
ans[up][i]=num;
num++;
}
if(++up>down) break;
for(int i=up;i<=down;i++)
{
ans[i][right]=num;
num++;
}
if(--right<left) break;
for(int i=right;i>=left;i--)
{
ans[down][i]=num;
num++;
}
if(--down<up) break;
for(int i=down;i>=up;i--)
{
ans[i][left]=num;
num++;
}
if(++left>right) break;
}
return ans;
}
};