Spiral Matrix
给一个2d数组, 返回一个数组, 是这个数组的sprial遍历. 就是顺时针的转. 这个题就是做慢点..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
public class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<Integer>(); if(matrix == null ||matrix.length == 0) return res; int m = matrix.length; int n = matrix[0].length; int x = 0; int y = 0; while(m > 0 && n > 0) { if(m == 1){ for(int i = 0 ; i < n; i++) res.add(matrix[x][y++]); break; } if(n == 1){ for(int i = 0; i < m; i++) res.add(matrix[x++][y]); break; } for(int i = 0 ; i < n-1; i++) res.add(matrix[x][y++]); for(int i = 0; i < m-1; i++) res.add(matrix[x++][y]); for(int i = 0; i < n-1; i++) res.add(matrix[x][y--]); for(int i = 0; i < m-1; i++) res.add(matrix[x--][y]); x++; y++; m-=2; n-=2; } return res; } } |