5/30/2014

46. Spiral Matrix

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> res = new ArrayList<Integer> ();
       
        if (matrix.length==0) return res;
       
        int m = matrix.length;
        int n = matrix[0].length;
       
        order(matrix, m, n, 0, res);
        return res;
    }
   
    public void order(int[][] matrix, int m, int n, int k, ArrayList<Integer> res) {
        if (m<=0 || n<=0) return;
       
        if (m==1) {
            for (int j=0; j<n; j++) {
                res.add(matrix[k][k+j]);
            }
            return;
        }
       
        if (n==1) {
            for (int i=0; i<m; i++) {
                res.add(matrix[k+i][k]);
            }
            return;
        }
       
        //to right
        for (int j=0; j<n-1; j++) {
            res.add(matrix[k][k+j]);
        }
       
        //to down
        for (int i=0; i<m-1; i++) {
            res.add(matrix[k+i][n-1+k]);
        }
       
        //to left
        for (int j=0; j<n-1; j++) {
            res.add(matrix[m-1+k][n-1+k-j]);
        }
       
        //to up
        for (int i=0; i<m-1; i++) {
            res.add(matrix[m-1+k-i][k]);
        }
       
        order(matrix, m-2, n-2, k+1, res);
    }
}

没有评论:

发表评论