import java.util.*;
public class Main{
//按照左下方向输出对角线上的元素
public List<Integer> leftDown(int[][] input, int n, int startX, int startY){
List<Integer> diagList = new ArrayList<>();
while(startX<=n-1 && startY>=0){
diagList.add(input[startX][startY]);
startX++;
startY--;
}
return diagList;
}
//按照右上方向输出对角线元素
public List<Integer> rightUp(int[][] input, int m, int startX, int startY){
List<Integer> diagList = new ArrayList<>();
while(startX>=0 && startY<=m-1){
diagList.add(input[startX][startY]);
startX--;
startY++;
}
return diagList;
}
public int[] solution(int[][] input, int n, int m){
if(input == null){
return null;
}
boolean leftDownFlag = true;
List<Integer> matrixList = new ArrayList<>();
int diagLineNumber = n+m-1;
int startX, startY;
for(int i=0; i<diagLineNumber; i++){
if(leftDownFlag){//第奇数个对角线
if(i<m){
startX=0;
startY=i;
}else{
startX=i+1-m;
startY=m-1;
}
matrixList.addAll(leftDown(input, n, startX, startY));
}else{//第偶数个对角线
if(i<n){
startX=i;
startY=0;
}else{
startX=n-1;
startY=i+1-n;
}
matrixList.addAll(rightUp(input, m, startX, startY));
}
leftDownFlag=!leftDownFlag;//更新标记变量
}
int length = matrixList.size();
int[] output = new int[length];
for(int i=0; i<length; i++){
output[i] = matrixList.get(i);
}
return output;
}
}