对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
想了一下题目可以使用递归来做,自己对递归也不太熟悉,就用这个来练练手好了。
import java.util.Arrays;
public class OutputString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] sortString=addNum(5);
//排序数组
Arrays.sort(sortString);
/*System.out.println(Arrays.toString(sortString));
可以将数组按[00000, 00001, 00010, 00011, ....]输出*/
//按要求输出数组
for(int m=0;m<sortString.length;m++){
System.out.println(sortString[m]);
}
}
private static String[] addNum(int j) {
// TODO Auto-generated method stub
String[] returnArrays=new String[getTwo(j)];
//if语句实现退出递归的出口
if(j>1){
//最重要的一句,实现递归
String[] catchArrays=addNum(j-1);
for(int m=0;m<catchArrays.length;m++){
returnArrays[m]=catchArrays[m]+"0";
}
for(int m=0;m<catchArrays.length;m++){
returnArrays[catchArrays.length+m]=catchArrays[m]+"1";
}
return returnArrays;
}
else{
//j=1的情况
returnArrays[0]="0";
returnArrays[1]="1";
return returnArrays;
}
}
//获得returnArrays的长度
public static int getTwo(int num){
int sum=1;
for(int i=0;i<num;i++)
{
sum=sum*2;
}
return sum;
}
}