[leetcode]Spiral Matrix
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]
.
算法思路:
这道题其实是[leetcode]Spiral Matrix II的加强版(命名似乎有点本末倒置),上题是放,本题是取。道理是一样的都是扫描。
只不过上题保证了每一圈都是四条边,而本题不一定,可能是一条边,两条边,三条边,四条边均可。【其中三条边和四条边的处理时一样的】
因此在loop的时候要加上两个判断。
代码如下:
1 public class Solution { 2 public List<Integer> spiralOrder(int[][] matrix) { 3 List<Integer> res = new ArrayList<Integer>(); 4 if(matrix == null || matrix.length == 0) return res; 5 int height = matrix.length; 6 int width = matrix[0].length; 7 int min = Math.min(height,width) + 1; 8 for(int i = 0; i < min >> 1; i++){ 9 for(int j = i; j < width - i; j++){ 10 res.add(matrix[i][j]); 11 } 12 for(int j = i + 1; j < height - i; j++){ 13 res.add(matrix[j][width - i - 1]); 14 } 15 if(height - i - 1 == i) continue;//只有一条边 16 for(int j = width - i - 2; j >= i; j--){ 17 res.add(matrix[height - i - 1][j]); 18 } 19 if(width - i - 1 == i) continue;//只有两条边 20 for(int j = height - i - 2; j > i; j--){ 21 res.add(matrix[j][i]); 22 } 23 } 24 return res; 25 } 26 }
木有太大难度