首页 > 代码库 > [leetcode]Spiral Matrix

[leetcode]Spiral Matrix

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 }

木有太大难度