leetCode 螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的全部元素。java

示例 1:web

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]svg

在这道题上花费了很多时间,关于退出的临界条件,把握的不是很好。spa

public List<Integer> spiralOrder(int[][] matrix) {
	    if(matrix==null) return null;
        int a = -1, b = -1, c = -1, d = 0;
        int i = 0, j = -1;
        List<Integer> ans = new LinkedList<>();
        if(matrix.length==0 || matrix[0].length==0) return ans;
        int n = matrix.length;
        int m = matrix[0].length;
        int k = m*n;
        while(k>0){
            a++;b++;c++;d++;
            for( ++j; j<m-a; j++)
            {
                ans.add(matrix[i][j]);k--;
            }
            if(k==0) break;
            for(++i,--j ; i<n-b; i++)
            {
                ans.add(matrix[i][j]);k--;
            }
            if(k==0) break;
            for( --j,--i; j>=c; j--)
            {
                ans.add(matrix[i][j]);k--;
            }
            if(k==0) break;
            for( i--,++j; i>=d; i--)
            {
                ans.add(matrix[i][j]);k--;
            }
            ++i;
        }
        return ans;
    }