【发布时间】:2013-11-06 16:25:57
【问题描述】:
我想根据用户输入找到任意大小的 2^n 排列。我不知道该怎么做。我知道我必须使用递归。与我见过的大多数示例不同,该函数的参数只是数字输入,没有可用于进行所有排列的字符串。所有排列都将存储在 arrayList 中并输出给用户。 即(输入3) 输出: 000 001 010 011 100 101 110 111 这是我到目前为止的代码:
public static void printBin(int bits) {
ArrayList<String> binaryArray = new ArrayList<String>();
if(bits == 0) {
System.out.println(binaryArray);
}
else {
for (String string2 : binaryArray) {
String comp = "";
if (comp.length() <= string2.length()) {
comp = string2;
string = comp;
}
string.concat("0");
binaryArray.add(string);
printBin(bits - 1);
string.concat("1");
binaryArray.add(string);
printBin(bits-1);
}
}
}
提前致谢。
【问题讨论】:
-
查看此问题的第一个答案:stackoverflow.com/questions/8461438/…。而不是 System.out.println,将其保存到列表中
-
您不必使用递归,您可以在 for 循环中执行此操作。是否需要将当前迭代作为参数?我假设您正在做的是将每个数字添加到列表中。如果您无法为要添加的当前数字创建参数,则必须使用列表大小来找出当前迭代是什么。
-
请注意,值 000、001、010、011、100、110 和 111 是数字 0 .. 7 的二进制值。可以使用 Integer.toBinaryString(int i) 来获取值。您是否有特殊原因要通过此类卷积来执行此操作?
-
我希望我不必使用递归@Radiodef。哈哈,我正试图将我的头脑围绕在递归上,这是我所拥有的书中给出的“家庭作业”问题。我想学习如何去做并理解它。还是谢谢。
-
@埃文斯。您能否解释如何在不使用字符串参数的情况下执行您建议的答案。我不确定如何完全翻转它。谢谢
标签: java algorithm recursion arraylist binary