题目
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
代码实现
通过对上一题:螺旋矩阵的代码稍作改动,就可解决本题问题。
class Solution {
public:
vector<vector<int>> generateMatrix(int n)
{
vector<vector<int>> Ans(n, vector<int>(n));
if(n == 0)
return Ans;
int flag = 0;
int count = n * n;
int round = n / 2 + n % 2;
int num = 1;
for(int i = 0;i < round;++i)
{
if(flag == 0 && count)
{
for(int j = i;j < n - i;++j)
{
Ans[i][j] = num;
num++;
count--;
}
flag = 1;
//count -= (n - (2 * i));
}
if(flag == 1 && count)
{
for(int j = i + 1;j < n - i;++j)
{
Ans[j][n - 1 - i] = num;
num++;
count--;
}
flag = 2;
//count -= (n - (2 * i + 1));
}
if(flag == 2 && count)
{
for(int j = n - 2 - i;j >= i;--j)
{
Ans[n - 1 - i][j] = num;
num++;
count--;
}
flag = 3;
//count -= (n - (2 * i + 1));
}
if(flag == 3 && count)
{
for(int j = n - 2 - i;j > i;--j)
{
Ans[j][i] = num;
num++;
count--;
}
flag = 0;
//count -= (n - (2 * i + 2));
}
}
return Ans;
}
};
实验结果
执行结果:通过
执行用时 :4 ms, 在所有 C++ 提交中击败了95.02%的用户
内存消耗 :8.7 MB, 在所有 C++ 提交中击败了95.57%的用户