题目描述
给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,如样例所示。
输入描述:
输入包含多行,第一行包含两个整数n和m,代表矩阵的行数和列数,接下来n行,每行m个整数,代表矩阵matrix。
输出描述:
输出一行 ,代表“之”字形输出的矩阵。
示例1
输入
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16
解法一:夹逼
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] info = br.readLine().trim().split(" ");
int row = Integer.parseInt(info[0]);
int col = Integer.parseInt(info[1]);
int[][] arr = new int[row][col];
for(int i=0;i<row;i++){
String[] tmp = br.readLine().trim().split(" ");
for(int j=0;j<col;j++){
arr[i][j] = Integer.parseInt(tmp[j]);
}
}
getRes(arr);
}
public static void getRes(int[][] arr){
if(arr==null||arr.length==0||arr[0].length==0) return ;
int row = arr.length;
int col = arr[0].length;
int li = 0,lj = 0;
int ri = 0,rj = 0;
StringBuilder sb = new StringBuilder();
boolean upToDown = false;
while(li!=row){
print(sb,arr,li,lj,ri,rj,upToDown);
if(lj<col-1){
lj++;
}else{
li++;
}
if(ri<row-1){
ri++;
}else{
rj++;
}
upToDown = !upToDown;
}
System.out.println(sb.toString().trim());
}
public static void print(StringBuilder sb,int[][] arr,int li,int lj,int ri,int rj,boolean f){
if(f){
while(li<=ri){
sb.append(arr[li++][lj--]+" ");
}
}else{
while(ri>=li){
sb.append(arr[ri--][rj++]+" ");
}
}
}
}