排列的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