190423打卡:转圈打印矩阵

题目要求按照转圈的方式打印给定的整型矩阵。解决方案是从左上角和右下角开始,逐步遍历矩阵的外圈并进入内圈,确保额外空间复杂度为O(1)。
摘要由CSDN通过智能技术生成

题目描述:
转圈打印矩阵
【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。
例如:

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
【要求】 额外空间复杂度为O(1)

思路:左上角和右下角正好可以构成一个矩形的边界,所以就从左上角和右下角的行和列出发,从外圈到内圈一圈圈遍历矩阵,然后控制左上角和右下角的行和列进入到内圈,如此重复则可打印完

public class Code_005_PrintMatrixSpiralOreder {
	public static void spiralOrderPrint(int[][] matrix) {
		int aH = 0;	//左上角行
		int aL = 0;	//左上角列
		int bH = matrix.length - 1; //右下角行
		int bL = matrix[0].length - 1; //右下角列
		
		while(aH <= bH && aL <= bL) {
			//打印边界,每打印完一圈后,进入到内圈
			printEdge(matrix, aH++, aL++, bH--, bL--);
		}
	}
	
	public static void printEdge(int[][] matrix, int aH, int aL, int bH, int bL) {
		if (aH == bH) { //处理边界条件,整个矩阵只有一行
			for (int i = 0; i < matrix.length; i++) {
				System.out.print(matrix[aH][i] + " ");
			}
		} else if (aL == bL) { //处理边界,整个矩阵只有一列
			for (int i = 0; i < matrix.length; i++) {
				System.out.print(matrix[i][aL] + " ");
			}
		} else {
			int curL = aL; 
			int curH = aH;
			while(curL != bL) {
				System.out.print(matrix[aH][curL++] + " ");
			}
			
			while(curH != bH) {
				System.out.print(matrix[curH++][bL] + " ");
			}
			
			while(curL != aL) {
				System.out.print(matrix[bH][curL--] + " ");
			}
			
			while(curH != aH) {
				System.out.print(matrix[curH--][aL] + " ");
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值