顺时针打印矩阵

public ArrayList<Integer> printMatrix(int [][] matrix) {
    ArrayList<Integer> res = new ArrayList<>();
    int m = matrix.length;
    int n = matrix[0].length;

    int top=0,down=m-1;
    int left=0,right=n-1;
    while(top<=down && left<=right){
        for(int j=left;j<=right;j++){
            res.add(matrix[top][j]);
        }
        top++;
        for(int i=top;i<=down;i++){
            res.add(matrix[i][right]);
        }
        right--;
        if(top<=down){ // 经过前面的 top++ 后,top 有可能大于 down,此时是没有意义的
            for(int j=right;j>=left;j--){
                res.add(matrix[down][j]);
            }
            down--;
        }
        if(left<=right){ // 经过前面的 right-- 后,right 有可能小于 left,此时是没有意义的
            for(int i=down;i>=top;i--){
                res.add(matrix[i][left]);
            }
            left++;
        }
    }
    return res;
}

https://www.mianshi.onlinehttps://www.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!

逃跑的眼镜_bvbEK5
7 声望0 粉丝