首页 > 编程语言 > 详细

排列的Java递归语言实现

时间:2016-01-21 15:45:44      阅读:236      评论:0      收藏:0      [点我收藏+]

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

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

 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

排列的Java递归语言实现

原文:http://www.cnblogs.com/lamulacuo/p/permutation.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!