蓝桥杯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两个字符,遍历六次,拼接字符串,利用遍历的特殊性实现题目要求。