没有重复项数字的全排列
使用一个list,对数组进行排序。 在函数中首先就是终止条件判断,之后用一个for数组进行遍历,交换,递归调用,在回溯即可。
public void swap(ArrayList<Integer> list,int i,int index){
int temp=list.get(i);
list.set(i,list.get(index));
list.set(index,temp);
}
public void recure(ArrayList<ArrayList<Integer>> lists,ArrayList<Integer> list,int index){
if(index==list.size()-1) lists.add(list);
for (int i=index;i<list.size();i++){
swap(list,i,index);
recure(lists,list,index+1);
swap(list,i,index);
}
}
public ArrayList<ArrayList<Integer>> permute(int[] num) {
Arrays.sort(num);
ArrayList<ArrayList<Integer>> lists=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list=new ArrayList<Integer>();
for (int i=0;i<num.length;i++){
list.add(num[i]);
}
recure(lists,list,0);
return lists;
}