题目:
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; } };