给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
执行用时为0ms的范例:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int s = 0, e = 1, end = n * n;
while (e <= end) {
for (int i = s; i < n - s; ++i)
res[s][i] = e++;
for (int i = s + 1; i < n - s; ++i)
res[i][n - s - 1] = e++;
for (int i = n - s - 2; i >= s; --i)
res[n - s - 1][i] = e++;
for (int i = n - s - 2; i > s; --i)
res[i][s] = e++;
++s;
}
return res;
}
};
我的解答:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> >res;
res.resize(n);
int i=0,j=0,k=1,m=1,loop;
for(int i=0;i<n;i++)
{
res[i].resize(n);
}
if(n%2==0)
{
loop=n/2;
}
else
{
res[n/2][n/2]=n*n;
loop=n/2+1;
}
for(;k<=loop;k++)
{
for(;j<n-k;j++)
{
res[i][j]=m++;
}
for(;i<n-k;i++)
{
res[i][j]=m++;
}
for(;j>=k;j--)
{
res[i][j]=m++;
}
for(;i>=k;i--)
{
res[i][j]=m++;
}
i++;j++;
}
return res;
}
};
#思路是一样的,vector简直就是不会用嘛,这个题只要把奇数和偶数都测试一个就好了