54. 螺旋矩阵

设置上下左右四个边界

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        int m = matrix.length, n = matrix[0].length;
        int ibg = 0, ied = m - 1, jbg = 0, jed = n - 1;
        int i = 0, j = 0;
        while (ibg <= ied && jbg <= jed) {
            for (j = jbg; j <= jed; ++j) {
                ans.add(matrix[i][j]);
            }
            ++ibg;--j;
            for (i = ibg; i <= ied; ++i) {
                ans.add(matrix[i][j]);
            }
            --jed;--i;
            if (ibg <= ied) {
                for (j = jed; j >= jbg; --j) {
                    ans.add(matrix[i][j]);
                }
            }
            --ied;++j;
            if (jbg <= jed) {
                for (i = ied; i >= ibg; --i) {
                    ans.add(matrix[i][j]);
                }
            }
            ++jbg;++i;
        }
        return ans;
    }
}

你可能感兴趣的:(LeetCode,矩阵,算法,线性代数)