54. 螺旋矩阵 难度-LeetCode

心得:如何使这道题变得简单,定义数组的边界,上下左右。

每次单方向的循环,必须判断,判断的条件很精妙!!

以前自己做的判断条件写的不好,再就是注意上下左右的位置

是行不变,还是列不变,行增加还是列增加。

 1 class Solution {
 2   public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list=new ArrayList<>();
 3         if(matrix==null||matrix.length==0)
 4             return list;
 5           int rowNum=matrix.length;
 6           int colNum=matrix[0].length;
 7          int top=0,bot=rowNum-1,left=0,right=colNum-1;
 8             while(list.size()!=rowNum*colNum)
 9             {
10                 for(int i=left;i<=right;i++)
11                 {
12                     list.add(matrix[top][i]);
13                 }
14                 top++;
15               if(list.size()!=rowNum*colNum)
16                     for(int i=top;i<=bot;i++)
17                     {
18                         list.add(matrix[i][right]);
19                     }
20                 right--;
21            
22                  if(list.size()!=rowNum*colNum)
23                         for(int i=right;i>=left;i--)
24                         {
25                             list.add(matrix[bot][i]);
26                         }
27                     bot--;     
28                      if(list.size()!=rowNum*colNum)
29                             for(int i=bot;i>=top;i--)
30                             {
31                                 list.add(matrix[i][left]);
32                             }
33                         left++;     
34             }
35             return list;
36         }
37 }

猜你喜欢

转载自www.cnblogs.com/pc-m/p/11069098.html