剑指offer_19:顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

1、模拟运算

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new int[0];
        int row=matrix.length;
        int col=matrix[0].length;
        int num=row*col;
        int[] res=new int[num];
        boolean[][] flag=new boolean[row][col];
        int[][] gowhere={{0,1},{1,0},{0,-1},{-1,0}};
        int i=0,j=0;
        int index=0;
        for(int k=0;k<num;k++){
            res[k]=matrix[i][j];
            flag[i][j]=true;
            int newi=i+gowhere[index][0],newj=j+gowhere[index][1];
            if(newj>=col||newi>=row||newj<0||newi<0||flag[newi][newj]==true){
                index++;
                index%=4;
            }
            i+=gowhere[index][0];
            j+=gowhere[index][1];
        }
        return res;
    }
}

2、边界

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new int[0];
        int row=matrix.length;
        int col=matrix[0].length;
        int[] res=new int[row*col];
        int left=0,top=0,right=col-1,bottom=row-1;
        int index=0;
        while(left<=right&&top<=bottom){
            for(int j=left;j<=right;j++){
                res[index++]=matrix[top][j];
            }
            for(int i=top+1;i<=bottom;i++){
                res[index++]=matrix[i][right];
            }
            if(top<bottom){
                for(int j=right-1;j>=left;j--){
                    res[index++]=matrix[bottom][j];
                }
            }
            if(left<right){
                for(int i=bottom-1;i>top;i--){
                    res[index++]=matrix[i][left];
                }
            }
            left++;
            right--;
            top++;
            bottom--;
        }
        return res;
    }
}
posted @ 2020-12-17 14:19  小昊子丫  阅读(72)  评论(0编辑  收藏  举报