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

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

 

posted @ 2017-07-21 04:20  Jimmy_Cheng  阅读(1966)  评论(0编辑  收藏  举报