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

多维数组和矩阵之顺时针打印二维数组

题目描述:

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

算法思路

打印顺序如图所示:
顺时针打印顺序
顺时针打印,从外到里,不失普遍性针对所有循环圈都是:
第一步: 先打印上面一条边,再打印右边一条边,再打印下面一条边,最后打印左边一条边。打印一圈以后,左上角的指针像右下角移动,右下角的元素指针向左上角移动,即
在这里插入图片描述
第二步: 之后便是循环执行第一步的逻辑
第三步: 那么什么时候循环终止呐?就是当左上角的行指针大于右下角的行指针 或 左上角的列指针大于右下角的列指针 时,循环终止,此时顺时针打印全部完成。

代码实现

public class _01_顺时针打印二维数组 {
    public static void main(String[] args) {
        int[][] matrix = {
                {1,2,3,4},
                {5,6,7,8},
                {9,10,11,12},
                {13,14,15,16}
        };
        printMatrix(matrix);
    }
    //顺时针打印二维数组
    static void printMatrix(int [][] matrix) {
        int leftUpRow = 0,//循环打印圈的左上角元素的行指针
            leftUpCol = 0,//循环打印圈的左上角元素的列指针
            rightDownRow = matrix.length - 1, //循环打印圈的右下角角元素的行指针
            rightDownCol = matrix[0].length -1;//循环打印圈的右下角角元素的列指针
        while (leftUpRow <= rightDownRow && leftUpCol <= rightDownCol) {
            //上面一条边
            int r = leftUpRow,c = leftUpCol;
            while (c <= rightDownCol) {
                System.out.print(matrix[r][c++]+" ");
            }
            //右边一条边
            r ++;
            c = rightDownCol;
            while (r <= rightDownRow) {
                System.out.print(matrix[r++][c]+" ");
            }
            //下面一条边
            r = rightDownRow;
            c --;
            while (c >= leftUpCol) {
                System.out.print(matrix[r][c--]+" ");
            }
            //左边一条边
            r --;
            c = leftUpCol;
            while (r > leftUpRow) {
                System.out.print(matrix[r--][c]+" ");
            }

            leftUpRow ++;leftUpCol ++;
            rightDownRow --;rightDownCol -- ;
        }
    }
}

相关文章:

  • 各种数据库连接代码(JSP)
  • 多维数组与矩阵之0所在的行列清零
  • 多维数组与矩阵之之字形打印矩阵
  • 生姜有味的调色板
  • 设计模式之策略者模式详解(Strategy Pattern)
  • 利用J2ME里的RMS对记录进行排序
  • 设计模式之职责链(责任链)模式(ResponsibilityChain Pattern)
  • SWT GC的drawLine方法的一个隐藏Bug
  • 多维数组与矩阵之子数组的最大累加和
  • 游戏也是软件,J2ME游戏程序员不能忘本
  • 多维数组与矩阵之子矩阵的最大累加和
  • 本周技术关注:Oracle10G、MSSQL2005、MYSQL5: CLuster、Replication、Snapshot
  • 设计模式之解释器模式详解(Interpreter Pattern)
  • 书评--信息经营法则
  • Java最大公约数与最小公倍数
  • 时间复杂度分析经典问题——最大子序列和
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Iterator 和 for...of 循环
  • Javascript弹出层-初探
  • LintCode 31. partitionArray 数组划分
  • oldjun 检测网站的经验
  • Redis在Web项目中的应用与实践
  • spark本地环境的搭建到运行第一个spark程序
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分类模型——Logistics Regression
  • 高度不固定时垂直居中
  • 计算机在识别图像时“看到”了什么?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 面试遇到的一些题
  • 漂亮刷新控件-iOS
  • 全栈开发——Linux
  • 人脸识别最新开发经验demo
  • 树莓派 - 使用须知
  • 新书推荐|Windows黑客编程技术详解
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​2021半年盘点,不想你错过的重磅新书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • $jQuery 重写Alert样式方法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (13)Hive调优——动态分区导致的小文件问题
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十一)c52学习之旅-动态数码管
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)树状数组
  • (转)项目管理杂谈-我所期望的新人
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework初体验