全排列(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 }

 

posted @ 2016-03-12 21:02  笑哼  阅读(1147)  评论(0编辑  收藏  举报