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