顺时针打印矩阵

题目大意

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

分析

可以将打印矩阵分为,打印矩阵的每一圈。打印总是从(start,start)位置开始。首先我们要明白如何确定每一圈的起始位置,也就是明确start的取值范围。


image.png

image.png

举例分析,假设输入矩阵大小为rows * cols. 则start需要符合start * 2<rows && start*2<cols。


image.png

输出每一圈矩阵数字,可以分为四个步骤。如上图所示,步骤1不需要条件判断,而步骤2-4都需要条件的筛选。

  1. 往右走。for(int i=start;i<=endX;i++)
  2. 往下走。if(start < endY)
  3. 往左走。if(start<endY && start < endX)
  4. 往上走。if(start<endY-1 && start<endX)

代码

首先来看最外层的代码,输出矩阵每一圈的函数在 printCircle中。

 public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> res = new ArrayList<>();
       if(matrix == null || matrix.length == 0) return res;
       int rows = matrix.length;
       int cols = matrix[0].length;
    
       for(int start = 0;start*2<rows && start*2<cols ;++start)
              printCircle(matrix,start,res);
       return res;
    }
private void printCircle(int[][] matrix,int start,ArrayList<Integer>res) {
        int cols = matrix[0].length;
        int rows = matrix.length;
        int endX = cols-start-1;
        int endY = rows-start-1;
        //四种情况
        //1.先向右边走,这一步一定会发生
        for(int i=start;i<=endX;i++) {
            res.add(matrix[start][i]);
            System.out.print(matrix[start][i]+" ");
        }
        //2. 往下走
        if(start < endY) {
            for(int i = start+1;i<=endY;i++) {
                res.add(matrix[i][endX]);
                System.out.print(matrix[i][endX]+" ");
            }
        }
        //3. 往左走
        if(start<endY && start < endX) {
            for(int i = endX-1;i>=start;--i) {
                res.add(matrix[endY][i]);
                System.out.print(matrix[endY][i]+" ");
            }
        }
        // 4. 向上走
        if(start<endY-1 && start<endX) {
            for(int i=endY-1;i>=start+1;--i) {
                res.add(matrix[i][start]);
                System.out.print(matrix[i][start]+" ");
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 ...
    wuzhiguo阅读 1,325评论 0 0
  • 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2...
    Max_7阅读 236评论 0 0
  • 原题链接顺时针打印矩阵 题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4...
    storm_lincoln阅读 413评论 0 0
  • 解法一:递归第一步:顺时针打印矩阵,一圈一圈的打印,首先想到的就是用递归的方法,每次传入一个矩阵,然后打印矩阵的外...
    刘小小gogo阅读 306评论 0 0
  • 11月10日晚间,河北蠡县6岁坠井男童聪聪被救出,随后官方宣布其不幸身亡。一波未平,一波又起。聪聪父亲赵向阳的...
    大朵叨叨阅读 494评论 2 3

友情链接更多精彩内容