题解 | #螺旋矩阵#

螺旋矩阵

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

    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> list = new ArrayList<>();
        //判断空
        if(matrix.length==0) return list;
        //设定四个边界,上下左右边界
        int top=0,bottom=matrix.length-1;
        int left=0,right=matrix[0].length-1;
    //四个循环搞定一圈,外层再次循环用来循环所有, //直到边界重合
        while(left<=right && top<= bottom){
            //上边界的从左到右
            for (int i = left; i <=right ; i++) {
                list.add(matrix[top][i]);
            }
            //上边界相应就往下一行,要判断上下边界是否相遇相交。
            top++;
            if(top>bottom) break;
            //右边界的从上到下
            for (int i = top; i <=bottom ; i++) {
                list.add(matrix[i][right]);
            }
            //上边界相应就往下一行,要判断上下边界是否相遇相交。
            right--;
            if(left>right) break;
            //下边界的从右到左
            for (int i = right; i >=left ; i--) {
                list.add(matrix[bottom][i]);
            }
            //下边界相应就往上一行,要判断上下边界是否相遇相交。
            bottom--;
            if(top>bottom) break;
            //左边界的从下到上
            for (int i = bottom; i >=top ; i--) {
                list.add(matrix[i][left]);
            }
            //左边界就相应往右一列,要判断左右边界是否相遇相交。
            left++;
            if(left>right)break;
        }
        return list;
    }

全部评论

相关推荐

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