全排列(java版)
适用于不同数字的全排列,其实也适用于有重复数字的全排列,只不过的出来的结果有重复,需手动删减掉重复的组合。
1 package testFullPermutation; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class testFullPermutation 7 { 8 ArrayList<ArrayList<Integer>> fullPermutation=new ArrayList<ArrayList<Integer>>(); 9 public ArrayList<ArrayList<Integer>> allSort(int[] buf) 10 { 11 int end=buf.length; 12 if (end==0) 13 { 14 return null; 15 } 16 else 17 { 18 fullPermutation=perm(buf,0,end-1); 19 return fullPermutation; 20 } 21 } 22 23 public ArrayList<ArrayList<Integer>> perm(int[] buf,int start,int end) 24 { 25 if (start==end)// 26 { 27 ArrayList<Integer> oneKind=new ArrayList<Integer>(); 28 for (int i=0;i<buf.length;i++)//递归终止条件 29 { 30 oneKind.add(buf[i]); 31 } 32 fullPermutation.add(oneKind); 33 34 } 35 else 36 { 37 for (int i=start;i<=end;i++) 38 { 39 int temp=buf[start]; 40 buf[start]=buf[i]; 41 buf[i]=temp; 42 perm(buf,start+1,end); 43 //还原成交换之前的组合 44 temp=buf[start]; 45 buf[start]=buf[i]; 46 buf[i]=temp; 47 } 48 49 } 50 return fullPermutation; 51 } 52 53 }
路漫漫其修远兮,吾将上下而求索