给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
class Solution
{
public:
static vector<vector<int>> generateMatrix(int n)
{
// auto V = vector<vector<int>>(n);错误写法
auto V = vector<vector<int>>(n, vector<int>(n, 0));
int count = 1;
int set_x = 0;
int set_y = 0;
int j = 0;
int i = 0;
int step = 1;
// 循环多少次 如果是奇数的话中间的值就等count最后的值
int x = n / 2;
while (x--)
{
// 四条边都保持左闭右开的区间
for (j = set_y; j < n - step; j++)
{
V[i][j] = count++;
}
for (i = set_x; i < n - step; i++)
{
V[i][j] = count++;
}
for (; j > set_y; j--) // 这里j >= step也可以
{
V[i][j] = count++;
}
for (; i > set_x; i--) // i >= step 也可以
{
V[i][j] = count++;
}
step++; // 每次一个圈之后就 不要那个边界
i = ++set_x; // 转了一圈之后 i j 就变到下一个一开始(0,0)变为(1,1)再变为(2,2) 要++
j = ++set_y;
}
// 奇数的话最后等于count 因为之前++了这里不用++
if (n % 2 == 1)
{
V[n / 2][n / 2] = count;
}
return V;
}
};