当我用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);
}
}
答案 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));
}