所以我一直在嘲笑我的大脑一段时间,而代码工作时,它以绝对错误的顺序打印它。我觉得我错过了一些东西所以我可以使用额外的一双眼睛。
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");
}
}
似乎是将arraylist的第二个元素设置为1但不在循环中覆盖它。
打印:
000 100 010 110 001 101 011 111
任何帮助将不胜感激
答案 0 :(得分:0)
就我在你的代码中读到的那样,你试图从一组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) );
}
称之为:
gen( sizeOfSet - 1, 0 );
答案 1 :(得分:0)
你的代码看起来像。
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