当前位置: 首页 > article >正文

矩阵处理—转圈打印矩阵

与其明天开始,不如现在行动!

文章目录

    • 转圈打印矩阵
      • 1 题目描述
      • 2 解决思路
      • 3 代码实现
  • 💎总结


转圈打印矩阵

1 题目描述

一个n行m列矩阵,需要从外围开始转圈打印,直到所有数据都被打印,如图:

spira

2 解决思路

最外围的打印终点的下一个就是里一层的打印起点

  1. 用四个指针,两个行指针,两个列指针,指针全都在要打印的那一层
  2. 行指针中,一个只在要打印的第一行移动,一个只在要打印的最后一行移动
  3. 列指针中,一个只在要打印的第一列移动,一个只在要打印的最后一列移动

3 代码实现

public class PrintMatrixSpiralOrder {
    public static void spiralOrderPrint(int[][] matrix) {
        int firstRow = 0;
        int firstColumn = 0;
        int endRow = matrix.length - 1;
        int endColumn = matrix[0].length - 1;
        while (firstRow <= endRow && firstColumn <= endColumn) {
            printEdge(matrix, firstRow++, firstColumn++, endRow--, endColumn--);
        }

    }

    private static void printEdge(int[][] matrix, int firstRow, int firstColumn, int endRow, int endColumn) {
        if (firstRow == endRow) { // 如果矩阵是个列矩阵
            while (firstColumn <= endColumn) {
                System.out.print(matrix[firstRow][firstColumn++] + " ");
            }
        } else if (firstColumn == endColumn) { // 如果矩阵是个行矩阵
            while (firstRow <= endRow) {
                System.out.print(matrix[firstRow++][firstColumn] + " ");
            }
        }else { // 正常打印
            int row = firstRow;
            int column = firstColumn;
            while (firstColumn != endColumn) {
                System.out.print(matrix[firstRow][firstColumn++] + " ");
            }
            while (firstRow != endRow) {
                System.out.print(matrix[firstRow++][firstColumn] + " ");
            }
            while (firstColumn != column) {
                System.out.print(matrix[firstRow][firstColumn--] + " ");
            }
            while (firstRow != row) {
                System.out.print(matrix[firstRow--][firstColumn] + " ");
            }
        }
    }

    public static void main(String[] args) {
        int[][] matrix = new int[5][3];
        int num = 1;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = num++;
            }
        }
        spiralOrderPrint(matrix);
    }
}

💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!



http://www.kler.cn/a/159617.html

相关文章:

  • 速盾:如何有效防止服务器遭受攻击?
  • ssm114基于SSM框架的网上拍卖系统的设计与实现+vue(论文+源码)_kaic
  • 力扣-Mysql-3308- 寻找表现最佳的司机(中等)
  • 算法学习第一弹——C++基础
  • 《Python网络安全项目实战》项目5 编写网站扫描程序
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • HomeAssistant如何添加HACS插件实现公网控制米家与HomeKit等智能家居
  • Redis的基本数据类型及常用命令
  • Codeforces Round 913 (Div. 3) A~E(F,G更新中)
  • ES6迭代器
  • Elasticsearch一些函数查询
  • 【头歌系统数据库实验】实验4 MySQL单表查询
  • HarmonyOS学习--TypeScript语言学习(三)
  • 图片点击放大
  • go基础语法10问(2)
  • WPF Live Charts2 自学笔记
  • 20、pytest中的参数化
  • 213. 打家劫舍 II --力扣 --JAVA
  • 华为云obs在java中的使用
  • 应用层自定义协议
  • Jmeter测试移动接口性能 —— 压测
  • MySQL性能调优-2-实际优化案例
  • Redis高效缓存:加速应用性能的利器
  • 反序列化漏洞详解(二)
  • 【MySQL环境配置在虚拟机中】
  • 力扣面试经典150题——Unix简化路径