-1

我有一个数组列表

List value = new ArrayList();

这个数组列表的值是 = {a,b,c,d}

我需要使用这个数组列表来组合字符串

所需输出:abcd,bcd,acd,abd,abc,cd,bd,bc,ad,ac,ab,a,b,c,d,null

如果它是可能的?那么请给我发送代码....

这是我的代码,但并不完美

import java.util.ArrayList;
import java.util.List;
public class PossibleCombination {

public static void main(String[] args) {




    List segList = new ArrayList();
    for(int i=65;i<70;i++){
        segList.add((char)i);

    }
    int segSize = segList.size();
    int[][] a = new int[segSize][2];
    int i;

    for(i=0; i<= segSize-1; i++)
    {

        a[i][0] = 0;
        a[i][1] = 1;

    }

    boolean b1 = true;
        int t =0;
    while(b1)
    {
        StringBuffer stb = new StringBuffer();
        for(i=0;i<segSize; i++)
        {
            if(a[i][0]==0)
            stb.append(segList.get(i));
        }

        System.out.println(stb);

        if(t>=a.length){
            t=0;
        }
        int Pos=t;
        while(a[Pos][0]>=a[Pos][1])
        {
            if(Pos<segSize-1)
                Pos++;
            else
                break;
        }
        a[Pos][0]++;
        Pos--;
        while(Pos>=0)
        {
            if(a[Pos][0]>0)
            {
                a[Pos][0]--;
                break;
            }
            Pos--;
        }
        t++;

        if(a[segSize-1][0]> a[segSize-1][1]){
            b1 = false;
        }
    }
}

}

4

2 回答 2

0

是的,这绝对是可能的。然而,它当然需要指数级的时间。

我将把实际的实现留给你,但这里有一些提示。

最简单的方法是递归,但这会很快占用大量堆栈空间。

另一种方法是通过对结果列表进行某种呼吸优先扩展。这可以通过 FIFO 队列迭代完成。

于 2013-11-09T11:15:13.800 回答
0
List<String[]> value = new ArrayList<String[]>();
String[] item = {"a","b","c"};
value.add(item);
于 2013-11-09T11:21:50.073 回答