给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
import java.util.Scanner;
/**
* 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历。
样例
对于如下矩阵:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10, 11, 12]
]
返回 [1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12]
* @author Dell
*
*/
public class Test185 {
public static int[] printZMatrix(int[][] matrix)
{
if(matrix==null) //空指针
return null;
int m=matrix.length; //行
int n=matrix[0].length; //列
int a=0,b=0;
int i=0;
int count=m*n;
//只有一行
if(m==1)
return matrix[0];
//只有一列
if(n==1)
{
int[] result=new int[m];
for(int j=0;j<m;j++)
result[j]=matrix[j][0];
return result;
}
int[] re=new int[m*n];
re[i++]=matrix[a][b];
while(i<count)
{
//斜向上遍历
while(a>0&&b<n-1)
{
re[i++]=matrix[--a][++b];
}
//斜向上遍历结束,接下来向右或者向下
if(b<n-1)
{
re[i++]=matrix[a][++b];
}
else
{
if(a+1<m)
re[i++]=matrix[++a][b];
}
//斜向下遍历
while(a+1<m&&b>0)
{
re[i++]=matrix[++a][--b];
}
//斜向下遍历结束,向下或者向右
if(a+1<m)
{
re[i++]=matrix[++a][b];
}
else
{
if(b+1<n)
re[i++]=matrix[a][++b];
}
}
return re;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int[][] a=new int[m][n];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=sc.nextInt();
}
}
int[] result=printZMatrix(a);
for(int i=0;i<result.length;i++)
System.out.print(result[i]+" ");
}
}