题解 | #螺旋矩阵#

螺旋矩阵

https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> spiralOrder(int[][] matrix) {

       if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return new ArrayList<>();
        }
        ArrayList<Integer> back = new ArrayList<>();
        int i = matrix.length;
        int j = matrix[0].length ;
        if(i == 1 && j==1) {
            back.add(matrix[0][0]);
            return back;
        }

        for (int k =0; k<(i+1)/2; k++) {
            int l = k;
            for(; l<j-1-k; l++) {
                if(back.size() == i*j) {
                    return back;
                }
                back.add(matrix[k][l]);
            }
            for(int m = k; m<i-k-1; m++) {
                if(back.size() == i*j) {
                    return back;
                }
                back.add(matrix[m][l]);
            }
            // 翻转
            reverseThis (back, k,l,i,j, matrix);
            //break;
            //若是最终相差一个,则把最后一个插入
            if(back.size() == i*j-1 && i==j) {
                back.add(matrix[k+1][k+1]);
            }
        }
        return back;
    }

    /**
     * 翻转
     * @param back
     * @param k 0
     * @param l 2
     * @param i 4
     * @param j 3
     * @param matrix
     */
    private void reverseThis(ArrayList<Integer> back, int k, int l, int i, int j, int[][] matrix) {
        //for(int m = j; m<j-1; m++)
        int m = l;
        for(; m > k; m--) {
            if(back.size() == i*j) {
                return ;
            }
            back.add(matrix[i-1-k][m]);
        }
        for(int n = i-1-k; n>k; n--) {
            if(back.size() == i*j) {
                return ;
            }
            back.add(matrix[n][m]);
        }

    }

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务