import java.util.ArrayList; //全网最垃圾代码 public class Solution { boolean[][] is_pass; ArrayList list = new ArrayList<>(); public ArrayList printMatrix(int [][] matrix) { if(matrix==null) return list; if(matrix.length==0 || matrix[0].length==0) return list;

   is_pass = new boolean[matrix.length][matrix[0].length];
	for(int i = 0;i < is_pass.length;i++) {
		for(int j = 0;j < is_pass[i].length;j++) {
			is_pass[i][j] = false;
		}
	}
	to_right(matrix,0,0);
	return list;
}
private void to_right(int[][] matrix,int x,int y) {
	if(y>matrix[0].length-1 || is_pass[x][y]) {
		if(x+1>matrix.length-1 || is_pass[x+1][y-1]) return;
		to_down(matrix,x+1,y-1);
	}else {
		list.add(matrix[x][y]);
		is_pass[x][y] = true;
		to_right(matrix,x,y+1);			
	}
}
private void to_down(int[][] matrix,int x,int y) {
	if(x>matrix.length-1 || is_pass[x][y]) {
		if(y-1<0 || is_pass[x-1][y-1]) return;
		to_left(matrix,x-1,y-1);
	}else {
		list.add(matrix[x][y]);
		is_pass[x][y] = true;
		to_down(matrix,x+1,y);	
	}
}
private void to_left(int[][] matrix,int x,int y) {
	if(y<0 || is_pass[x][y]) {
		if(x-1<0 || is_pass[x-1][y+1]) return;
		to_up(matrix,x-1,y+1);
	}else {
		list.add(matrix[x][y]);
		is_pass[x][y] = true;
		to_left(matrix,x,y-1);	
	}
}
private void to_up(int[][] matrix,int x,int y) {
	if(x<0 || is_pass[x][y]) {
		if(y+1>matrix[0].length-1 || is_pass[x+1][y+1]) return;
		to_right(matrix,x+1,y+1);
	}else {
		list.add(matrix[x][y]);
		is_pass[x][y] = true;
		to_up(matrix,x-1,y);
	}
}

}