Java 实现顺时针打印矩阵

本文详细解析了如何使用Java实现顺时针打印矩阵的问题,包括思路分析、循环函数、打印一圈的函数以及具体的测试案例。通过判断矩阵大小,确定不同方向的打印条件,确保每个数字只被打印一次。
摘要由CSDN通过智能技术生成

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如,如果输入如下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。

思路分析:当我们顺时针打印该矩阵时,每一圈的起始位置是左上角的元素,并且每一圈左上角元素都有一个共同点:它的行和列所对应的的下标都是相同的。所以不难想到,该矩阵打印结束的条件就是左上角的元素下标走到了该矩阵行和列的一半时该矩阵也就打印结束了。因为矩阵也是用下标来确定某个数字的,所以这里就是:4>1×2(左上角下标为(1,1)时时最后一圈)

可是,我们上面给的矩阵很特殊,并且行和列的都是偶数个,不具有说服力,我们还需要考虑考虑其他的情况,以验证我们得到的结论是否具有普遍性。例如:一个7×7的矩阵,将该矩阵打印结束的条件就是:左上角的元素为(3,3)时,也就是说7>3×2

这里乘二也是因为矩阵每打印完一圈,对应的下三角部分已经打印过了。
现在还有一个问题,就是如何打印矩阵的每一圈:
在这里插入图片描述
如上图,矩阵打印一圈需要四步,这个是一般情况

当我们的矩阵是行大于列、列大于行的时候可能不需要四步,就可以打印结束:
在这里插入图片描述从上图不难看出所有情况中是都出现了从左向右打印,而其他方向的打印则时有时无,这就需要加判断函数,判断当前这一圈是否需要打印这三个方向上的数字:

(1)从上到下:矩阵行数至少为2,即:终止行号必须大于起始号(这里不可以等于哦,否则会产生矩阵右上角的元素重复多打印一次);
(2)从右往左:矩阵至少为两行两列,即:终止列号必须大于起始号,并且终止行号必须大于起始号(同样,不可以等于,否则矩阵右下角的元素会多打印一次);
(3)从下到上:矩阵至少为三行两列,即:终止行号必须比起始号大2,并且终止号必须大于起始号(同样,不可以等于,否则会出现左下角和右上角元素多打印一次)

打印思路具体如下(例如是一个5×4的矩阵):
在这里插入图片描述
使用while循环打印,初始化初始起始号(start)为0,每次循环打印一圈后初始号自增。

循环函数:

public ArrayList<Integer> printMatrix(int [][] matrix) {
   
        ArrayList<Integer> list = new ArrayList<Integer>();
        int row 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值