我们随便定义一个二维数组:
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);
}
用上面数组测试,就是上面那个结果,下面我们来分析一下这个算法:
首先要确定这个算法,我们要先知道,这个数组一共打印多少次,这样就可以确定第一层循环的次数,接下来我们定义一些变量,方便找一些规律。