class Solution {
public int[] findDiagonalOrder(int[][] mat) {
if (mat == null || mat.length == 0 || mat[0].length == 0) { //空矩阵判定
return new int[0];
}
int m = mat.length; //行
int n = mat[0].length; //列
int[] list = new int[m * n]; //存放元素的新数组
int count = 0; //计数
int i = 0;
int j = 0;
boolean direct = true; //方向值(向上为true,向下为false)
while (count < (m * n)) {
if (direct) {
//向上
while (i >= 0 && j < n) { //到达边界则跳出循环
list[count] = mat[i][j]; //将遍历到的元素放入新数组
--i; //行减少
++j; //列增加
++count;
}
if (j == n) { //到达边界后进行两种情况判定(上边界还是右边界)
--j;
i = i + 2;
} else { //上边界
++i;//j在上面的while已经加过了,不用加了
}
} else {
//向下
while (i < m && j >= 0) {
list[count] = mat[i][j];
++i; //行增加
--j; //列减少
++count;
}
if (i == m) { //同上进行判定(下边界还是左边界)
--i;
j = j + 2;
} else {
++j;
}
}
direct = !direct; //到达边界后调整方向
}
return list;
}
}
02-16
588
06-15
152
10-14
1161