leetcode------Spiral Matrix
标题: | 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 List<Integer> spiralOrder(int[][] matrix) { 3 ArrayList<Integer> result=new ArrayList<Integer>(); 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<Integer> getvalue(ArrayList<Integer> 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 }