类别:数组 特定顺序遍历二维数组
题目:
想法:
按照题目要求遍历即可,注意斜向上移动时有到顶侧和到右侧之分。
代码:
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int i,j;
int m=mat.length; //行数
int n=mat[0].length; //列数
int sum=m*n; //元素总数
int[] list = new int[sum];
i=0;
j=0; //循环变量
int cnt=0;
while(true){
if(i>=m || j>=n) //超出mat矩阵范围则跳出循环
break;
//斜向上
while(true){
if(i>=m || j>=n) //超出mat矩阵范围则跳出循环
break;
list[cnt]=mat[i][j];
cnt++;
if(i==0){
//到达最顶侧 准备开始斜向下移
if(j==n-1){
//到达最右侧 下移一行
i++;
}else{
//未到达最右侧 右移一列
j++;
}
break;
}else{
//到达非顶侧
if(j==n-1){
//到达最右侧 准备开始斜向下移
//下移一行
i++;
break;
}else{
//斜向上移:上移一行 右移一列
i--;
j++;
}
}
}
//斜向下
while(true){
if(i>=m || j>=n) //超出mat矩阵范围则跳出循环
break;
list[cnt]=mat[i][j];
cnt++;
if(i==m-1){
//到达最底侧 准备开始斜向上移动
//右移一列
j++;
break;
}else{
//到达非底侧
if(j==0){
//到达最左侧 准备开始斜向上移动
//右移一列
i++;
break;
}else{
//斜向下移:下移一行 左移一列
i++;
j--;
}
}
}
}
return list;
}
}
/*
一个样例
[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
*/
结果: