Java编程题:顺时针打印矩阵
发布日期:2021-05-08 06:39:03 浏览次数:25 分类:精选文章

本文共 2042 字,大约阅读时间需要 6 分钟。

顺时针打印矩阵的思路是逐层打印矩阵的边框,并逐步缩小矩阵范围,直到所有元素被打印。具体步骤如下:

  • 初始化四个指针,分别控制当前打印的行和列的起点和终点。
  • 进入循环,逐层打印矩阵的边框:
    • 如果当前只有一行,按顺序打印该行的所有元素。
    • 如果当前只有一列,按顺序打印该列的所有元素,但注意不要重复打印右上角的元素。
    • 按顺序打印右边的列和下边的列。
  • 在每次循环后,调整指针的值,缩小矩阵范围。
  • 继续循环,直到所有元素被打印完毕。
  • 以下是具体的实现代码:

    public class Printer {
    public int[] clockwisePrint(int[][] mat, int n, int m) {
    int[] result = new int[n * m];
    if (mat == null) {
    return result;
    }
    int startX = 0;
    int startY = 0;
    int endX = n - 1;
    int endY = m - 1;
    int k = 0;
    while (k < n * m) {
    if (startX == endX) {
    for (int j = startY; j <= endY; j++) {
    result[k++] = mat[startX][j];
    }
    break;
    }
    if (startY == endY) {
    for (int i = startX; i <= endX; i++) {
    result[k++] = mat[i][endY];
    }
    break;
    }
    for (int j = startY; j <= endY; j++) {
    result[k++] = mat[startX][j];
    }
    for (int j = endY; j >= startY; j--) {
    result[k++] = mat[endX][j];
    }
    for (int i = startX; i <= endX; i++) {
    result[k++] = mat[i][endY];
    }
    for (int i = endX; i >= startX; i--) {
    result[k++] = mat[i][endY - 1];
    }
    if (startX != endX && startY != endY) {
    startX++;
    startY++;
    endX--;
    endY--;
    }
    }
    return result;
    }
    }

    代码解释:

  • 初始化变量:创建一个结果数组result,用于存储打印后的顺序。检查输入矩阵是否为null,如果是,直接返回空数组。

  • 循环处理:使用while循环,循环条件是k小于矩阵的元素总数(n * m)。每次循环处理一层边框。

  • 处理单行情况:如果当前行是最后一行(startX == endX),按顺序打印该行的所有元素,并跳出循环。

  • 处理单列情况:如果当前列是最后一列(startY == endY),按顺序打印该列的所有元素,但注意避免重复打印右上角的元素。

  • 打印边框

    • 从左到右打印当前行的所有元素。
    • 从右到左打印下一行的所有元素。
    • 从上到下打印右边的所有列元素,注意避免重复打印右上角的元素。
    • 从右到左打印下边的所有列元素。
  • 调整范围:每次循环后,调整startXstartYendXendY的值,逐步缩小矩阵范围。

  • 退出条件:当所有元素被打印完毕后,k会达到n * m,循环结束,返回结果数组。

  • 通过这种方法,可以实现对矩阵元素的顺时针打印,确保每个元素按照指定的顺序被访问和记录。

    上一篇:Java基础题;toLowerCase后判断字符串相等
    下一篇:Java编程题:简单错误记录(LinkedHashMap)

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月27日 17时04分37秒