1. 程式人生 > >LeetCode 59. Spiral Matrix II (螺旋矩陣之二)

LeetCode 59. Spiral Matrix II (螺旋矩陣之二)

question hms 參考 ger should rate spa 條件 日期

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]


題目標簽:Array

  這道題目和之前的螺旋矩陣幾乎沒有區別,而且更簡單。同樣按照螺旋矩陣的特性,設置4個邊界,rowBegin = 0, rowEnd = n-1, colBegin = 0, colEnd = n-1。   螺旋矩陣的走法:num = 1; 每次把num++代入矩陣     1.從rowBegin 這一行開始, 從左往右走 [colBegin ~ colEnd],走完把rowBegin++,這行已經走完不需要了。     2.從colEnd 這一列開始,從上往下走 [rowBegin ~ rowEnd],走完把colEnd--,這列不需要了。     3.從rowEnd 這一行開始,從右往左走 [colEnd ~ colBegin],走完把rowEnd--, 這行不需要了。     4.從colBegin 這一列開始,從下往上走 [rowEnd ~ rowBegin],走完把colBegin++,這列不需要了。 相比與螺旋矩陣之1, 這題的矩陣都是n*n,所以不需要在每一個for loop 裏設置額外條件,因為螺旋矩陣1 裏面給的是 m*n 可能不是正方形。

Java Solution:

Runtime beats 57.87%

完成日期:07/20/2017

關鍵詞:Array

關鍵點:螺旋矩陣的遍歷模式;設置四個邊界值

 1 public class Solution 
 2 {
 3     public int[][] generateMatrix(int n) 
 4     {
 5         int[][] res = new int[n][n];
 6         
 7         int total = n*n;
 8         int num = 1;
 9         
10         int rowBegin = 0;
11         int
rowEnd = n-1; 12 int colBegin = 0; 13 int colEnd = n-1; 14 15 while(num <= total) 16 { 17 // traverse right (y changes) 18 for(int y=colBegin; y<=colEnd; y++) 19 res[rowBegin][y] = num++; 20 21 rowBegin++; //
move down one row 22 23 // traverse down (x changes) 24 for(int x=rowBegin; x<=rowEnd; x++) 25 res[x][colEnd] = num++; 26 27 colEnd--; // move left one column 28 29 // traverse left (y changes) 30 for(int y=colEnd; y>=colBegin; y--) 31 res[rowEnd][y] = num++; 32 33 rowEnd--; // move up one row 34 35 // traverse up (x changes) 36 for(int x=rowEnd; x>=rowBegin; x--) 37 res[x][colBegin] = num++; 38 39 colBegin++; // move right one column 40 41 } 42 43 return res; 44 } 45 }

參考資料:N/A

LeetCode 算法題目列表 - LeetCode Algorithms Questions List

LeetCode 59. Spiral Matrix II (螺旋矩陣之二)