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; } }