1. 程式人生 > 實用技巧 >leetcode 91:spiral-matrix-ii

leetcode 91:spiral-matrix-ii

題目描述

給定一個整數n,將數字1到n2n^2n2按螺旋的順序填入n×n的矩陣 例如: 給出的n=3, 你應該返回如下矩陣:
[↵ [ 1, 2, 3 ],↵ [ 8, 9, 4 ],↵ [ 7, 6, 5 ]↵]
題目分析:
這個題屬於常規題,就是旋轉著給陣列賦值,需要搞清楚行和列的關係,當轉完一圈以後,行和列的處理。

程式碼如下:
 1 vector<vector<int> > generateMatrix(int n) {
 2         std::vector<std::vector<int
>> v; 3 if (n < 1) 4 return v; 5 6 for (int i = 0; i < n; i++) 7 { 8 std::vector<int> t(n); 9 v.push_back(t); 10 } 11 12 int num = 1; 13 int rowStart = 0, rowEnd = n - 1, colStart = 0, colEnd = n - 1; 14 while (num <= n*n)
15 { 16 for (int i = colStart; i <= colEnd; i++) 17 { 18 v[rowStart][i] = num++; 19 } 20 for (int i = rowStart + 1; i <= rowEnd; i++) 21 { 22 v[i][colEnd] = num++; 23 } 24 for (int i = colEnd - 1; i >= colStart; i--)
25 { 26 v[rowEnd][i] = num++; 27 } 28 29 for (int i = rowEnd - 1; i > rowStart; i--) 30 { 31 v[i][colStart] = num++; 32 } 33 rowStart++; 34 rowEnd--; 35 colStart++; 36 colEnd--; 37 } 38 39 return v; 40 }