打印zigzag矩阵

比较愚蠢但是很好理解的一种方法

public static void printZigzag (int n){
		int[][] arr = new int[n][];
		//动态创建数组 并初始化
		for (int i = 0; i < arr.length; i ++)
		{
			arr[i] = new int[n];
			Arrays.fill(arr[i], 0);
		}
		
		int num = 0, flag = 0;
		int row = 0, col = 0;
		//处理 左上三角阵
		for (row = 0; row < arr.length; row ++)
		{
			col = 0;
			// 偶数行
			if(row%2==0){
				num = row*(row+1)/2;
				flag=1;
			}
			// 奇数行
			if(row%2==1)
			{
				num = row*(row+1)/2 + row;
				flag=-1;
			}
			for(int i = 0; i < row+1; i++)
			{
				arr[row-i][col+i] = num + i*flag;
			}
			
		}
		
		// 同理 处理右下三角阵
		for (row = 0; row < arr.length - 1; row ++)
		{
			int newRow = n-1-row;
			int newCol = n-1;
			
			//偶数行
			if(row%2==0){
				num = n*n-1 - (row*(row+1)/2);
				flag = -1;
			}
			//奇数行
			if(row%2==1){
				num = n*n-1 - (row*(row+1)/2) - row;
				flag = 1;
			}
			
			for(int i = 0; i < row+1; i++)
			{
				arr[newRow+i][newCol-i] = num + i*flag;
			}
		}
		
		
		
		for (int[] a : arr) {
			for (int i : a) {
				System.out.printf("%3d", i);
			}
			System.out.println();
		}
		
	}

  

posted @ 2017-02-28 16:03  zhangoliver  阅读(515)  评论(0编辑  收藏  举报