Spiral Matrix

给一个2d数组, 返回一个数组, 是这个数组的sprial遍历. 就是顺时针的转. 这个题就是做慢点..

public class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<Integer>();
        if(matrix == null ||matrix.length == 0)
            return res;
        int m = matrix.length;
        int n = matrix[0].length;
        
        int x = 0;
        int y = 0;
        
        while(m > 0 && n > 0) {
            if(m == 1){
                for(int i = 0 ; i < n; i++)
                    res.add(matrix[x][y++]);
                break;
            }
            if(n == 1){
                for(int i = 0; i < m; i++)
                    res.add(matrix[x++][y]);
                break;
            }
            
            for(int i = 0 ; i < n-1; i++)
                res.add(matrix[x][y++]);
            for(int i = 0; i < m-1; i++)
                res.add(matrix[x++][y]);
            for(int i = 0; i < n-1; i++)
                res.add(matrix[x][y--]);
            for(int i = 0; i < m-1; i++)
                res.add(matrix[x--][y]);
                
            x++;
            y++;
            m-=2;
            n-=2;
        }
        return res;
        
    }
}