Java 递归打印ArrayList的二进制子集
所以我为此绞尽脑汁已经有一段时间了,当代码运行时,它以完全错误的顺序打印出来。我觉得我错过了什么,所以我可以多用一双眼睛Java 递归打印ArrayList的二进制子集,java,recursion,arraylist,binary,Java,Recursion,Arraylist,Binary,所以我为此绞尽脑汁已经有一段时间了,当代码运行时,它以完全错误的顺序打印出来。我觉得我错过了什么,所以我可以多用一双眼睛 void recursiveBitPatterns(ArrayList<String> subsets, int n) { if (n==1) { subsets.add("0"); subsets.add("1"); return; } recursiveBitPatterns(su
void recursiveBitPatterns(ArrayList<String> subsets, int n)
{
if (n==1)
{
subsets.add("0");
subsets.add("1");
return;
}
recursiveBitPatterns(subsets, n-1);
int asize = subsets.size();
for(int i=0; i<asize; i++)
{
String nsub = subsets.get(i);
subsets.set(i, nsub +"0");
subsets.add(nsub + "1");
}
}
void recursiveBitPatterns(ArrayList子集,int n)
{
如果(n==1)
{
子集添加(“0”);
子部分添加(“1”);
回来
}
递归比特模式(子集,n-1);
int asize=子集.size();
对于(inti=0;i,就我在代码中读到的内容而言,您正试图从一组N个元素中生成所有可能的子集
让子集成为存储子集的arraylist
void gen(int N, int subset) {
if ( N < 0 ) {
subsets.add( Integer.toBinaryString(subset) );
return;
}
gen(N - 1, subset);
gen(N - 1, subset | (1 << N) );
}
你的代码看起来像
void recursiveBitPatterns(ArrayList<String> subsets, int n)
{
if (n==1)
{
subsets.add("0");
subsets.add("1");
return;
}
recursiveBitPatterns(subsets, n-1);
int asize = subsets.size();
for(int i=0; i<asize; i++)
{
String nsub = subsets.get(i);
subsets.set(i, "0" + nsub);
subsets.add("1" + nsub);
}
}
代码应该做什么?什么输入生成了该输出?您希望得到什么输出?您的意思是“从一组N个元素中打印所有子集”?它是LSB优先,而不是MSB优先。@VitJaybird我已经理解了您要显示的内容。我已经修改了您的代码,请看下面。谢谢!我想我的代码中有一个小问题。这很有帮助!
void recursiveBitPatterns(ArrayList<String> subsets, int n)
{
if (n==1)
{
subsets.add("0");
subsets.add("1");
return;
}
recursiveBitPatterns(subsets, n-1);
int asize = subsets.size();
for(int i=0; i<asize; i++)
{
String nsub = subsets.get(i);
subsets.set(i, "0" + nsub);
subsets.add("1" + nsub);
}
}
000 001 010 011 100 101 110 111