本文介绍: 我们主要分析以下几种情况。

顺时针打印矩阵

题目

描述
输入一个矩阵,按照从外向里以顺时针顺序依次打印出每一个数字,例如,如果输入如下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]
数据范围:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
牛客题目链接

思路

顺时针打印矩阵
我们主要分析以下几种情况

  1. 只有一行的时候,我们需要遍历打印即可
  2. 只有一列的时候,我们同样只需要遍历打印即可
  3. 对于多行多列的情况,我们需要按照规定的顺序进行打印
代码实现
    private ArrayList&lt;Integer&gt; result = new ArrayList<&gt;();

    public ArrayList<Integer> printMatrix(int[][] matrix) {
        if (matrix == null || matrix[0] == null || matrix[0].length == 0) {
            return result;
        }
        int tR = 0; //表示第一行下标
        int tC = 0; //表示第一列下标
        int index = 0; //表示当前集合下标
        int dR = matrix.length - 1; //最后一行下标
        int dC = matrix[0].length - 1; //最后一列下标
        while (tR <= dR &amp;&amp; tC <= dC) { 
            printMatrix(matrix, tR++, tC++, dR--, dC--, index); //不断往中间靠拢
        }
        return result;
    }

    private void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, int index) {
        if (tR == dR) {
            //只有一行的情况
            for (int i = dR; i <= dC; i++) {
                result.add(matrix[tR][i]);
            }
        } else if (tC == dC) {
            //只有一列的情况
            for (int i = tR; i <= dR; i++) {
                result.add(matrix[i][tC]);
            }
        } else {
            //遵守矩阵打印规则
            int curR = tR;
            int curC = tC;
            while (curC != dC) {
                result.add(matrix[curR][curC]);
                curC++;
            }
            while (curR != dR) {
                result.add(matrix[curR][curC]);
                curR++;
            }
            while (curC != tC) {
                result.add(matrix[curR][curC]);
                curC--;
            }
            while (curR != tR) {
                result.add(matrix[curR][curC]);
                curR--;
            }
        }

    }

原文地址:https://blog.csdn.net/a734474820/article/details/134707279

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11977.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注