标签:
/* * 54. Spiral Matrix * 2016-5-7 by Mingyang * 第一个是我的代码,虽然我测试了各种形状的matrix还是没过,还在找原因 * 需要注意的就是row和col等于1的时候需要单独拿出来讨论,这样才可以通过 */ public static List<Integer> spiralOrder1(int[][] matrix) { int row=matrix.length; int col=matrix[0].length; List<Integer> res=new ArrayList<Integer>(); if(matrix==null||row==0||col==0) return res; int layer=0; if(row==1){ for(int k=0;k<col;k++){ res.add(matrix[0][k]); } return res; } if(col==1){ for(int k=0;k<row;k++){ res.add(matrix[k][0]); } return res; } while(layer<(Math.min(row,col)/2)){ int i=layer; int j=layer; for(;j<col-1-layer;j++){ res.add(matrix[i][j]); } for(;i<row-1-layer;i++){ res.add(matrix[i][j]); } for(;j>layer;j--){ res.add(matrix[i][j]); } for(;i>layer;i--){ res.add(matrix[i][j]); } layer++; } if(res.size()<(row*col)) res.add(matrix[layer][layer]); return res; } //这是过了的代码 public ArrayList<Integer> spiralOrder(int[][] matrix) { ArrayList<Integer> result = new ArrayList<Integer>(); if (matrix == null || matrix.length == 0) return result; int m = matrix.length; int n = matrix[0].length; int x = 0; int y = 0; while (m > 0 && n > 0) { // if one row/column left, no circle can be formed if (m == 1) { for (int i = 0; i < n; i++) { result.add(matrix[x][y++]); } break; } else if (n == 1) { for (int i = 0; i < m; i++) { result.add(matrix[x++][y]); } break; } // below, process a circle // top - move right for (int i = 0; i < n - 1; i++) result.add(matrix[x][y++]); // right - move down for (int i = 0; i < m - 1; i++) result.add(matrix[x++][y]); // bottom - move left for (int i = 0; i < n - 1; i++) result.add(matrix[x][y--]); // left - move up for (int i = 0; i < m - 1; i++) result.add(matrix[x--][y]); x++; y++; m = m - 2; n = n - 2; } return result; }
标签:
原文地址:http://www.cnblogs.com/zmyvszk/p/5469701.html