190425打卡:"之"字形打印矩阵

题目描述:
给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如:

1	2	3	4
5	6	7	8
9	10	11	12

“之”字形的打印结果为:
1,2,5,9,6,3,4,7,10,11,8,12

思路:采用两个点a,b都从左上角出发,a点只能向右走(aL++),走到头然后再向下走(aH++),b点只能向下走(bH++),走到头再向右走(bL++),a和b同步移动,两点之间的连线就是要打印的元素,如果上一次是从下向上打印,则下一次必定是从上向下打印,如此以往完成之字的打印

public class Code_009_ZigZagPrintMatrix {
	public static void printMatrixZigZag(int[][] matrix) {
		int aH = 0;
		int aL = 0;
		int bH = 0;
		int bL = 0;
		boolean fromDown = true;//控制下次打印的方向
		
		while(aH != matrix.length) {
			printLevel(matrix, aH, aL, bH, bL, fromDown);//打印对角线
			//注意以下的书写顺序,对于a点来说,是列变化完以后,再有行的变化,
			//也就是说行的变化的判断条件是列,所以要先书写行,避免列的变化的干扰
			//对于b点同理
			aH = aL == matrix[0].length - 1 ? aH + 1 : aH;
			aL = aL == matrix[0].length - 1 ? aL : aL + 1;
			bL = bH == matrix.length - 1 ? bL + 1 : bL;
			bH = bH == matrix.length - 1 ? bH : bH + 1;
			fromDown = !fromDown;//修改打印方向
		}
	}
	
	public static void printLevel(int[][] matrix, int aH, int aL, int bH, int bL, boolean fromDown) {
		if (fromDown) {
			while(bH != aH - 1) {
				System.out.print(matrix[bH--][bL++] + " ");
			}
		} else {
			while(aL != bL - 1) {
				System.out.print(matrix[aH++][aL--] + " ");
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值