矩阵的之字型遍历

给你一个包含 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]+" ");
	}

}
    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/wwe4023/article/details/73732874
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞