LintCode-矩阵的之字型遍历


容易 矩阵的之字型遍历

给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。


对于如下矩阵:

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

返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]



public class Solution {
    /**
     * @param matrix: a matrix of integers
     * @return: an array of integers
     */ 
    public int[] printZMatrix(int[][] matrix) {
		if(matrix == null){
			return null;
		}
		int m = matrix[0].length;
		int n = matrix.length;
		int i = 0;
		int count = n*m;
		int [] re = new int [count];
		int a=0,b=0;
		re[i++] = matrix[a][b];
		if(n == 1){
			return matrix[0];
		}
		if(m == 1){
			int [] ree = new int [n];
			for(int k =0; k<n;k++){
				ree[k] = matrix[k][0];
			}
		}
		while(i <count){
			//斜向上遍历
			while(a > 0 && b+1 < m){
				re[i++] = matrix[--a][++b];
			}
			//斜向上结束,试着往右或者下移动
			if(b+1 < m){
				re[i++] = matrix[a][++b];
			}else{
				if(a+1 <n){
					re[i++] = matrix[++a][b];
				}
			}
			//斜向下遍历
			while(a+1 < n && b > 0){
				re[i++] = matrix[++a][--b];
			}
			//斜向下遍历结束,试着往下或者往右移动
			if(a+1 < n){
				re[i++] = matrix[++a][b];
			}else{
				if(b + 1 <m){
					re[i++] = matrix[a][++b];
				}
			}
			
		}
		return re;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值