Tuesday, February 11, 2014

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].
Solution: 2D image transformation.
public class Solution {
    public ArrayList spiralOrder(int[][] matrix) {
        ArrayList ret = new ArrayList();
        int m = matrix.length;
        if(m == 0) return ret;
        int n = matrix[0].length;
        int k = Math.min(m,n);
        int layer = 0;
        for( ;layer < k/2; layer++){
            for(int j = layer; j < n - 1 - layer; j++) { ret.add(matrix[layer][j]);}
            for(int i = layer; i < m - 1 - layer; i++) { ret.add(matrix[i][n-1-layer]); }
            for(int j = n - 1 - layer; j > layer; j--) { ret.add(matrix[m-1-layer][j]); }
            for(int i = m - 1 - layer; i > layer; i--) { ret.add(matrix[i][layer]); }
        }
        if(k % 2 != 0){
         if(m <= n) for(int j = layer; j <= n - 1 - layer; j++) ret.add(matrix[layer][j]);
         if(m > n) for(int i = layer; i <= m - 1 - layer; i++) ret.add(matrix[i][n-1-layer]);
        }
        return ret;
    }
}

No comments:

Post a Comment