题目:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解答:
重要的是找到循环的规律:每层环都可以由四个部分组成,第一个环每部分长为(n-1),第二个环每部分长为(n-3)…(n-2k)… 如下图所示:
对于奇数与偶数不同的地方在于:奇数螺旋矩阵的最中间仅有一个部分组成,取值为 n;偶数螺旋矩阵的最中间仍然是四个部分。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<int> row(n, 0);
vector<vector<int>> ans(n, row);
if(n <= 0) return ans;
int x = 0, y = 0;
int num = 0;
int a, b, c, d;
for(int i=n-1; i>=0; i=i-2)
{
if(i == 0) ans[x][y] = n*n;
else
{
for(a = 0; a < i; a++)
{
ans[x][y+a] = ++num;
}
y = y + i;
for(b = 0; b < i; b++)
{
ans[x+b][y] = ++num;
}
x = x + i;
for(c = 0; c < i; c++)
{
ans[x][y-c] = ++num;
}
y = y - i;
for(d = 0; d < i; d++)
{
ans[x-d][y] = ++num;
}
x = x - i + 1;
y = y + 1;
}
}
return ans;
}
};