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);
}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值