排列的Java递归语言实现

在做算法题的时候,发现排列经常被使用到,是一个重要的知识点,

下面是博主修改过的代码,初学者,如有不足,欢迎指出

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 
 5 public class Permutation{
 6  
 7     public static void main(String[] args) {
 8     List<List<String>> lists = permute(Arrays.asList("1","2","3","4","5","6"),5);
 9     for(List<String> list:lists){
10         System.out.println(list);
11     }
12     }
13 
14     /**
15      * 实现排列的方法
16      * @param source    用于排列的元数据
17      * @param num    排列的长度
18      * @return    结果集
19      */
20     public static <T> List<List<T>> permute(List<T> source,int num){
21     
22     if(num<1||num>source.size()){
23         num = source.size();//非法值处理:全排列
24     }
25 
26     List<List<T>> lists = new ArrayList<List<T>>();
27     permute(source, new ArrayList<T>(),num,lists);
28     return lists;
29     
30     }
31     
32     /**
33      * 内部静态方法:实现排列
34      * @param source    用于排列的元数据
35      * @param target    排列后的表
36      * @param lists    结果集
37      * @param num    排列的长度
38      */
39     private static <T> void permute(List<T> source,List<T> target,int num,List<List<T>> lists){
40     if(target.size()==num){
41         lists.add(target); 
42     }
43     for(int i=0;i<source.size();i++){
44         List<T> newSource = new ArrayList<T>(source);
45         List<T> newTarget = new ArrayList<T>(target);
46         newTarget.add(newSource.get(i));
47         newSource.remove(i);    
48         permute(newSource,newTarget,num,lists);
49     }
50 
51     }
52 }

参考资料:http://blog.csdn.net/sunyujia/article/details/4124011

posted @ 2016-01-21 15:15  拉姆拉错  阅读(248)  评论(0编辑  收藏  举报