顺时针打印矩阵 (JAVA实现)

本文详细介绍了如何从外向内顺时针打印给定矩阵中的每一个数字,并提供了相应的代码实现。通过分析矩阵的特性,作者巧妙地利用对角线的概念来简化打印过程,使代码逻辑清晰且易于理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

给定一个矩阵,从外向内顺时针打印矩阵中的每一个数字。

例如:给定矩阵:

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}

分析:

问题的本质其实就是打印一个方形。每一个方形代表矩阵的每一层。但是,打印一个方形,我们必须要知道它的两个对角顶点的位置。有了对角顶点的位置,打印一个方形并不困难了。

注意:对于一个矩阵,它的长宽可能会不一样,所以,我们需要判断处理。

代码:

public void printCircle(int[][] matrix, int startX, int startY, int endX, int endY) {
	// only one column left
	if (startY == endY) {
		for (int i = startX; i <= endX; i++ ) {
			System.out.println(matrix[i][endY]);
		}
		return;
	}
	// only one row left
	if (startX == endX) {
		for (int i = startY; i <= endY; i++ ) {
			System.out.println(matrix[startX][i]);
		}
		return;
	}
	for (int i = startY; i < endY; i++ ) {
		System.out.println(matrix[startX][i]);
	}
	for (int i = startX; i < endX; i++ ) {
		System.out.println(matrix[i][endY]);
	}
	for (int i = endY; i > startY; i-- ) {
		System.out.println(matrix[endX][i]);
	}
	for (int i = endX; i > startX; i-- ) {
		System.out.println(matrix[i][startY]);
	}

}
	
public void printMatrix(int[][] matrix) {
	
	if (matrix == null) {
		return;
	}
	int startX = 0;
	int startY = 0;
	int endY = matrix[0].length - 1;
	int endX = matrix.length - 1;
	
	while ((startX <= endX) && (startY <= endY)) {
		printCircle(matrix, startX, startY, endX, endY);
		startX++;
		startY++;
		endX--;
		endY--;
	}
}
参考: http://blog.youkuaiyun.com/beiyeqingteng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值