编写一种方法来计算一串唯一字符的所有排列

时间:2014-10-19 19:30:54

标签: java arraylist indexoutofboundsexception

当我用5个元素集测试它时,我得到以下异常:

  

线程中的异常" main" java.lang.IndexOutOfBoundsException:Index:4,Size:2

以下是代码:

static ArrayList<ArrayList<Integer>> permutation(ArrayList<Integer> set){

    ArrayList<ArrayList<Integer>> permutations = new ArrayList<ArrayList<Integer>>();

    if (set.size() <= 1) {
        permutations.add(set);
        return permutations;
    }

    for (int element : set){
        ArrayList<Integer> setcopy = new ArrayList<Integer>();  
        setcopy.addAll(set);
        setcopy.remove(element);
        add(permutations, element, permutation(setcopy));
    }       
    return permutations;
}

static void add(ArrayList<ArrayList<Integer>> permutations, int element, ArrayList<ArrayList<Integer>> setcopy){


    for (ArrayList<Integer> al : setcopy){
           ArrayList<Integer> p = new ArrayList<Integer>();
           p.add(element);
           p.addAll(al);
           permutations.add(p);

     }

}

1 个答案:

答案 0 :(得分:1)

调用setcopy.remove(element)将删除位置元素处的int。 您没有删除元素本身。如果要删除元素,则必须编写setcopy.remove(setcopy.indexOf(element))

编辑:你也可以使用setcopy.remove(element),但是你必须像这样循环:

for (Integer element : set)

或者你可以这样做:

for (int element : set){
    //copy
    setcopy.remove(new Integer(element));
}