Java从上往下, 从右向左斜着打印二维数组

我们随便定义一个二维数组:

int[][] arr = {{0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4},
               {0,1,2,3,4}};

用图来解释一下:

也就是说,像上图一样,打印数组

0 
1 0 
2 1 0 
3 2 1 0 
4 3 2 1 0 
4 3 2 1 0 
4 3 2 1 0 
4 3 2 1 0 
4 3 2 1 
4 3 2 
4 3 
4 

我们先上代码,伸手党可以拿去了,具体的算法分析我们下面再讲:

public static void printObliqueArray(int[][] arr) {
    //总循环次数,要求性能最高,数组多少个数就循环多少次
    int allcount = 0;
    //大体上打印多 少行,也就是上图的斜线条数
    int num = arr.length + arr[0].length - 1;
    //二维数组的列数
    int num2 = arr[0].length;
    //j开始的下标
    int jstart = 0;
    //j结束的下标
    int jend = 0;
    //循环打印
    for(int i = 0; i < num ; i++) {
        //超过第4行,x就是有了规律,此处控制x
		int x = (i > (num2 - 1)) ? (i - num2 + 1) : 0;
        //控制循环次数和数组的y坐标
        jstart = (i > num2 - 1) ? num2 - 1 : i;
        jend = (num2 + i - num < 0) ? 0 : num2 + i - num;
        //打印每一行
        for(int j = jstart ; j >= jend ; j--) {			
            System.out.print(arr[x][j] + " ");
            x++;
            allcount++;
        }
        System.out.println();
    }
	System.out.println("数组数量为:"+arr.length * arr[0].length);
	System.out.println("总循环次数为:"+allcount);
}

用上面数组测试,就是上面那个结果,下面我们来分析一下这个算法:

首先要确定这个算法,我们要先知道,这个数组一共打印多少次,这样就可以确定第一层循环的次数,接下来我们定义一些变量,方便找一些规律。

猜你喜欢

转载自blog.csdn.net/qq_36186690/article/details/81145085