之字形打印矩阵

题目看图:

这个题目给人的第一感觉就是,这个出题人脑子又泡吧敲打。之字形打印?太无聊了,其实这个是一种宏观调度思想的实例。我前面也有写过两个相关题目:转圈打印旋转矩阵

讲讲思路:如果限制自己的思路,这个题目是十分难以实现的,和前面两个题目一样,需要两个点来控制走向A(aR,aC),B(bR,bC)(行,列).A点只向右走,当走到最右点的时候,就向下走,B点向下走,当到达最下点的时候就向右走,这样就形成了一个左上到右上的连线,依次将这些点打印粗来就欧克了。

下面看代码:

/**
 * 之字形打印一个矩阵
 * 例如:
 * 1 2 3
 * 4 5 6
 * 7 8 9
 * 打印:1,2,3,7,5,3,6,8,9
 * 思路:设置两个点A(aR,aC),B(bR,bC)(行,列)
 * A向右走,当到最右点的时候,向下走
 * B向下走,当到最下点的时候,向右走
 * 设置一个布尔变量表示从上到下还是从下到上打印
 * 当aR到最后一行的时候 或者 当bC到最后一列的时候标志着打印结束
 */
public class C07_ZigZagPrintMatrix {
	public static void zigZagPrintMatrix(int[][]matrix){
		if(matrix==null || matrix.length==0 || matrix[0].length==0){
			return ;
		}
		int aR = 0;//行
		int aC = 0;//列
		int bR = 0;//行
		int bC = 0;//列
		int endR = matrix.length-1;//行结束位置
		int endC = matrix[0].length-1;//列结束位置
		boolean fromUp = false;
		while(aR != matrix.length){
			printMatrix(matrix, aR, aC, bR, bC, fromUp);
			aR = aC==endC ? aR+1 : aR;
			aC = aC==endC ? aC : aC+1;
			bC = bR==endR ? bC+1 : bC;
			bR = bR==endR ? bR : bR+1;
			fromUp = !fromUp;
		}
	}
	public static void printMatrix(int[][]matrix,int aR,int aC,
								int bR,int bC,boolean fromUp){
		if(fromUp){
			while(aR!= bR+1){
				System.out.print(matrix[aR++][aC--]+" ");
			}
		}else {
			while(bR != aR-1){
				System.out.print(matrix[bR--][bC++]+" ");
			}
		}
	}
	public static void main(String[] args) {
		int matrix[][] = new int[][]{
			{1, 2, 3,  4},
			{5, 6, 7,  8},
			{9, 10,11, 12},
			{13,14,15, 16}
		};
		zigZagPrintMatrix(matrix);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值