54. Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

Example 1:

Input:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]

Example 2:

Input:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
1.从左到右,然后判断
2.从上到下,然后判断
3.从右到左,然后判断
4.从下到上,然后判断
class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<Integer>();
        if(matrix.length==0 || matrix[0].length ==0) return res;  //记住要判断空的情况
        int m = matrix.length, n = matrix[0].length;
        int up = 0, down = m-1, left = 0, right = n-1;
        while(true){
            for(int j = left; j <= right; j++) res.add(matrix[up][j]);
            if(++up > down) break;
            for(int i = up; i <= down; i++) res.add(matrix[i][right]);
            if(--right < left) break;
            for(int j = right; j >= left; j--) res.add(matrix[down][j]);
            if(--down < up) break;
            for(int i = down; i >= up; i--) res.add(matrix[i][left]);
            if(++left > right) break;
        }
        return res;
    }
}

 

posted @ 2019-02-08 00:57  Schwifty  阅读(115)  评论(0编辑  收藏  举报