题目
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
说明:
给定矩阵中的元素总数不会超过 100000 。
解题思路
- 可以把输出的一维数组想象成在输入的二维数组中的移动路径
- 这个移动路径有两个方向:向上和向下
- 确定好移动时出现的边界条件和调转方向的条件
代码
public int[] findDiagonalOrder(int[][] matrix) {
if (null==matrix||matrix.length==0) return new int[0];
int N = matrix[0].length;
int M = matrix.length;
int count = M * N;
int k = 0;//方向
int[] array = new int[count];
int r=0 ,c=0;//新数组坐标
for (int i = 0; i < count; i++) {
array[i] = matrix[r][c];
if (r==M-1&&c==N-1){
return array;
}
if (k%2 == 0){//向上
if (r==0&&c<N-1){
c++;k++;
}else if(r>=0&&c==N-1){//这里有边界
r++;k++;
}else {
r--;c++;
}
}else {//向下
if (r==M-1&&c>=0){//这里有边界
c++;k++;
}else if(r<M-1&&c==0){
r++; k++;
}else {
r++;c--;
}
}
}
return array;
}