心得:如何使这道题变得简单,定义数组的边界,上下左右。
每次单方向的循环,必须判断,判断的条件很精妙!!
以前自己做的判断条件写的不好,再就是注意上下左右的位置
是行不变,还是列不变,行增加还是列增加。
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 }