排列组合算法-----使用递归

来源:互联网 发布:比尔盖茨 关于编程 编辑:程序博客网 时间:2024/06/04 13:35


import java.util.Arrays;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
/**
 * 用1,2,2,3,4,5来打印出所有的排列组合信息
 * 要求3与5不相连,4不能出现在第三个位置
 * 提供一个通用的处理排列组合的算法
 * @author Administrator
 *
 */
public class SortOrderTest {


public static void main(String[] args) {
Deque<Integer> stack=new LinkedList<Integer>();
Set<String> set=new HashSet<String>();
Integer[] arr=new Integer[] {1,1,3,4,5};
print(arr,stack,set);
for(String s:set) {
System.out.println(s);
}
}



public static void print(Integer[] arr,Deque<Integer> stack,Set<String> set) {
if(arr.length==1) {
stack.push(arr[0]);
Iterator<Integer> iterator = stack.iterator();
String str="";
while(iterator.hasNext()) {
Integer next = iterator.next();
str=str+next;
}
if(str.indexOf("35")==-1&&str.indexOf("53")==-1&&str.indexOf("4")!=2) {
set.add(str);
}
stack.pop();
}else {
for(int i=0;i<arr.length;i++) {
stack.push(arr[i]);
Integer[] brr=arr.clone();
brr[i]=brr[brr.length-1];
brr=Arrays.copyOf(brr, brr.length-1);
print(brr,stack,set);
stack.pop();
}
}
}
}