leetcode498.对角线遍历

给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素。

这题的两个要点:
1.对下标的五种情况的判断
2.对传入的二维数组是:空数组,单行数组,单列数组的处理

class Solution {
    public int[] findDiagonalOrder(int[][] matrix) {
        //数组不存在或为空
		if(matrix ==null || matrix.length==0) {
			return new int[0];
		}
		int[] arr =null;
		//只有一行的情况
		if(matrix.length==1) {
			arr = new int[matrix[0].length];
			for(int i=0;i<matrix[0].length;i++) {
				arr[i] = matrix[0][i];
			}
			return arr;
		}
		//只有一列的情况
		if(matrix[0].length==1) {
			arr = new int[matrix.length];
			for(int i=0;i<matrix.length;i++) {
				arr[i] = matrix[i][0];
			}
			return arr;
		}
        int hang = matrix.length;
		int lie = matrix[0].length;	
		arr = new int[hang*lie];	//一维数组创建
		int i=0,j=0;	//二维数组下标遍历
		int index =0;	//一维数组下标遍历
		//循环二维数组
		while(i!=hang-1 || j!=lie-1) {
			arr[index] = matrix[i][j];
			index++;
			//i+j为偶数则右上遍历
			if((i+j)%2==0) {
				//向上到头,右边还有元素则往右走
				if(i==0 && j!=lie-1) {
					j++;
				//向上到头,右也到头;或向上未到头,向右到头时,则向下走	
				}else if(j==lie-1) {
					i++;
				}else {
					i--;
					j++;
				}
			//i+j为奇数则左下遍历
			}else {
				//向左到头,向下还有元素,则向下走
				if(j==0 && i!=hang-1) {
					i++;
				//向左向下都到头,或向下到头,向左未到头,都向左走
				}else if(i==hang-1) {
					j++;
				//正常左下走
				}else {
					i++;
					j--;
				}
			}
		}
		//最后一个元素的赋值
		arr[arr.length-1] = matrix[hang-1][lie-1];
		return arr;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值