蓝桥杯 基础练习 01字符串解法

蓝桥杯java 基础练习 01字符串的要求如下

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

估计很多朋友看到这个题目和要求,一下就想到,嗯对,遍历一下1-32,之后写一个方法,接收一个int类型,并将其转换为二进制后再返回,从而达到题目的要求。这样的解法最难的部分在于十进制转换为二进制,很简单,我们写一个方法,在里面加上以下的一点代码就可以实现将十进制转换为二进制:

    static LinkedList<Integer> B = new LinkedList<Integer>();
    private static void ReB(long number) {
		/*
		 * 该方法接收十进制数 并将接收的十进制数转化为二进制后分配给静态成员变量B
		 */
		if (number >= 2) {
			int yushu = (int) (number % 2);
			B.addFirst(yushu);
			ReB(number / 2);
		} else {
			B.addFirst((int) number);
		}
	}

如此,我们接收一个long类型的数字,转换为二进制以后暂存在LinkedList类型变量B中,最后遍历B就可以实现打印。

这样写可能更灵活,因为你随便给他多大他都能给你转换,比如说你不要1-32了,你说你要32-128,它一样的可以实现,但其实题目并没有太大的要求,他并没有说一定要写的特别灵活,它只是要求,写一个代码,打印01字符串,从小到大,所以,我们可以用更简单的方式:

    private static void SortB() {
		/*
		 * 该方法直接输出五位二进制字符串从小到大排列后的结果 该返回值不能参与计算
		 */
		String[] arr = { "0", "1" };
		for (String i : arr) {
			for (String j : arr) {
				for (String k : arr) {
					for (String l : arr) {
						for (String m : arr) {
							System.out.println(i + j + k + l + m);
						}
					}
				}
			}
		}
	}

大家看了我这个方法可能会觉得有很多投机取巧的地方,但其实是一样的,我们都实现了题目要求的,只是我这个看起来应该是更好理解一些,我设置了一个数字,里面只有0、1两个字符,遍历六次,拼接字符串,利用遍历的特殊性实现题目要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值