題目:
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> generateMatrix(int n) { vector row(n, 0); vector > 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; } };