美文网首页
《剑指offer第二版》面试题29:顺时针打印矩阵(java)

《剑指offer第二版》面试题29:顺时针打印矩阵(java)

作者: castlet | 来源:发表于2020-04-07 21:45 被阅读0次

题目描述

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

解题思路:

  1. 可以一圈一圈的打印,先打印最外层一圈,左上角坐标为(0, 0),再打印第二圈,左上角坐标为(1,1),以此类推。
  2. 如何判断打印完成了呢?只有符合数组长和宽 大于当前圈左上角坐标的2倍,说明需要继续打印。
  3. 打印一圈的时候,从左向右,从上到下,从有向左,再从下向上打印即可。

代码

void printMatrixClockwisely(int[][] matrix){
    if (matrix == null) {
        return;
    }
    if (matrix.length <= 0) {
        return;
    }

    int start = 0; // 记录打印地几圈
    while (start * 2 < matrix.length && start * 2 < matrix[0].length) {
        //
        printCircleInMatrix(matrix, start); // 打印第start圈
        start ++;
    }

}

// 打印矩阵中的一圈
void printCircleInMatrix(int[][] matrix, int start){
    int endX = matrix[0].length - start - 1;
    int endY = matrix.length - start - 1;

    // 从左到右打印一行
    for (int i = start; i <= endX; i++) {
        System.out.println(matrix[start][i]);
    }
    // 从上到下打印一行, 注意不要重复打印
    for (int i = start + 1; i <= endY; i++) {
        System.out.println(matrix[i][endX]);
    }
    // 从有到左打印一行
    for (int i = endX - 1; i >= start; i--) {
        System.out.println(matrix[endY][i]);
    }
    // 从下到上打印一行
    for (int i = endY - 1; i >= start + 1; i--) {
        System.out.println(matrix[i][start]);
    }
}

相关文章

网友评论

      本文标题:《剑指offer第二版》面试题29:顺时针打印矩阵(java)

      本文链接:https://www.haomeiwen.com/subject/nggophtx.html