Java递归、回溯实现全排列(Ann)
import java.util.ArrayList;
import java.util.List;
public class permutation {
//将全排列看成是当前index与后面的元素进行交换
public static void pailie(Object[] nums, int cur, List<Object[]> result){
if(cur>=nums.length){
Object[] temp=new Object[nums.length];
System.arraycopy(nums,0,temp,0,nums.length);
result.add(temp);
}
for(int i=cur;i<nums.length;i++){
swap(nums,cur,i);
pailie(nums,cur+1,result);
swap(nums,cur,i);
}
}
//交换
public static void swap(Object[] nums,int i,int j){
Object temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
//打印结果
public static void print(Object[] nums){
for(Object i:nums){
System.out.print(i+" ");
}
}
public static void main(String[] args) {
List list=new ArrayList();
Object[] nums=new Object[]{"a","b","c","d","e"};
pailie(nums,0,list);
System.out.println(list.size());
for(Object a:list){
print((Object[]) a);
System.out.println("\n");
}
}
}
要求目标数组内对象无重复,即结果无法去重。如下:
public static void main(String[] args) {
List list=new ArrayList();
Object[] nums=new Object[]{"a","b","b"};
pailie(nums,0,list);
System.out.println(list.size());
for(Object a:list){
print((Object[]) a);
System.out.println("\n");
}