算法题:1 3 6 10 15 2 5 9 14 4 8 13 7 12 11

**

算法题系列:1 3 6 10 15 2 5 9 14 4 8 13 7 12 11

**

算法题系列,开了几个系列,都只有一两篇,加油,慢慢写,补充自己。
这是前段时间在看的一道算法题,现在来分享一下,题目送上。

/*
输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
*/

方法1

		/*
		 * Method01:将每行的第一位数字与其后面的数字分开输出。
		 * 每行的第一位数字的输出使用(a+=(b++)),例如:第一行(a=1,b=0,此时(a+=(b++))输出为1;第二行(a=1,b=1,此时(a+=(b++))输出为2,以此类推)。
		 * 每行数字都是按照递增规律,所以每行除第一位数字的其余数字输出使用使用(m+=(++n)),例如:第一行第二个(m=1,n=1,此时(m+=(++n))输出为3,以此类推)。
		 * */
		int a = 1,b = 0;
		int m = 1,n = 1;
		for(int i = 1;i<=5;i++) {//外循环控制行数,这里是五行
			System.out.print((a+=(b++))+"\t");
			m = a;
			int j;
			for(j = 5;j>i;j--) {//内循环控制每行除第一位数字外的其余数字个数
				System.out.print((m+=(++n))+"\t");
			}
			n=i+1;//下一行数重新赋值新的数字
			System.out.println();
			
		}
		System.out.println();

方法二

		/*
		 * Method02:采用二维数组的方式,但这个并不是按照行顺序给数组赋值的,例如:(row=0时,ary[0][0];row=1时,ary[1][1],ary[0][1],以此类推)
		 * */
		int[][] ary = new int[5][5];
		int num = 1;
		for(int row = 0; row < ary.length; row++){
			for(int i = row, col = 0; i >= 0; i--){
				ary[i][col++] = num++;
			}
		}
		for(int[] aryItem : ary){
			for(int value: aryItem){
				if(value != 0){
					System.out.print(value + "\t");
				}
			}
			System.out.println();
		}
		System.out.println();

``

方法三:

		/*
		 * Method03:跟Method01有一点异曲同工,但还是有点不一样的,也可以算是一种思路
		 * Method03的内外循环和Method01的内外循环顺序不一样
		 * Method03使用一条输出语句,Method01将每行的第一位数字和其其余分开输出,两条输出语句
		 * */
		int key = 1,num = 0;
		int num_first = 1,num_row = 1;
		for (int i = 5; i >= 1; i--) {
			num = num_first;
			key = num_row + 1;
			for (int j = 1; j <= i; j++) {
				System.out.print(num + "\t");
				num += key;
				key++;
			}
			System.out.println();
			num_first+=num_row;
			num_row++;
		}
		System.out.println();

运行速度测试
使用的是System.nanoTime();方法取得纳秒值,可能会根据运行次数以及配置等问题有所误差。
Method01方法耗时:863300纳秒
Method02方法耗时:715300纳秒
Method03方法耗时:1256800纳秒

参考:
https://zhidao.baidu.com/question/487808374.html
https://www.zuoyesou.com/question/javawt.html

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值