标题: | Spiral Matrix |
通过率: | 20.8% |
难度: | 中等 |
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]
You should return [1,2,3,6,9,8,7,4,5]
.
前面先做了通过率高的第一个版本,那个给的是2Dmatrix,做这个题目的时候我没有看清楚,直接按照2Dmatrix做的,所以一直出现问题。
需要注意的是本题是M*N,所以M和N中有可能为空,有可能有一个是1,那么再循环的时候就要认真去考虑了。
直接看代码了:
1 public class Solution { 2 public ListspiralOrder(int[][] matrix) { 3 ArrayList result=new ArrayList (); 4 if (matrix == null || matrix.length == 0 5 || matrix[0].length == 0) { 6 return result; 7 } 8 int m=matrix.length,n=matrix[0].length; 9 int startX=0,startY=0,endX=m-1,endY=n-1;10 while(startX<=endX&&startY<=endY){11 result=getvalue(result,matrix,startX,endX,startY,endY);12 startX++;13 startY++;14 endX--;15 endY--;16 }17 return result;18 19 }20 public ArrayList getvalue(ArrayList res,int[][] matrix,int startX,int endX,int startY,int endY){21 if(startX==endX){22 for(int i=startY;i<=endY;i++){23 res.add(matrix[startX][i]);24 }25 return res;26 }27 else if(startY==endY){28 for(int i=startX;i<=endX;i++){29 res.add(matrix[i][startY]);30 }31 return res;32 }33 34 for(int i=startY;i<=endY;i++){35 res.add(matrix[startX][i]);36 }37 for(int i=startX+1;i<=endX;i++){38 res.add(matrix[i][endY]);39 }40 for(int i=endY-1;i>=startY;i--){41 res.add(matrix[endX][i]);42 }43 for(int i=endX-1;i>=startX+1;i--){44 res.add(matrix[i][startY]);45 }46 return res;47 48 }49 }