package com.sitinspring;
/** *//**
* 全排列算法示例如果用P表示n个元素的排列,而Pi表示不包含元素i的排列,(i)Pi表示在排列Pi前加上前缀i的排列,那么,n个元素的排列可递归定义为:
* 如果n=1,则排列P只有一个元素i如果n>1,则排列P由排列(i)Pi构成(i=1、2、.、n-1)。根据定义,容易看出如果已经生成了k-1个元素的排列,那么,
* k个元素的排列可以在每个k-1个元素的排列Pi前添加元素i而生成。例如2个元素的排列是1 2和2 1,对3个元素而言,p1是2 3和3 2,在每个排列
* 前加上1即生成1 2 3和1 3 2两个新排列,p2和p3则是1 3、3 1和1 2、2 1,按同样方法可生成新排列2 1 3、2 3 1和3 1 2、3 2 1。
*/
public class Permutation<T>{
public static void main(String[] args){
String[] arr={"1","2","3"};
Permutation<String> a=new Permutation<String>();
a.permutation(arr,0,arr.length);
}
public void permutation(T[] arr,int start,int end){
if(start<end+1){
permutation(arr,start+1,end);
for(int i=start+1;i<end;i++){
T temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}else{
for(int i=0;i<end;i++){
System.out.print(arr[i]);
}
System.out.print("\n");
}
}
}
六个数1、2、2、3、4、5,4不能排第三位,3和5不能相邻,给出所有满足要求的全排列。
import java.util.ArrayList;
import java.util.List;
public class GetAll {
List list = new ArrayList();
public GetAll() {
list.add("22");
}
public void AllOrder(String str) {
List listlin = new ArrayList();
for (int i = 0; i < list.size(); i++) {
String nstr = (String) list.get(i);
nstr = str + nstr;
String cmpstr = nstr;
listlin.add(nstr);
nstr = ChangeStr(nstr);
while (!cmpstr.equals(nstr)) {
listlin.add(nstr);
nstr = ChangeStr(nstr);
}
}
list.clear();
list.addAll(listlin);
}
public void OutAll() {
//过虑
for (int j = 0; j < list.size(); j++) {
String outstr = (String) list.get(j);
if ((outstr.indexOf("3") + 1 == outstr.indexOf("5"))
|| (outstr.indexOf("3") - 1 == outstr.indexOf("5"))
|| (outstr.indexOf("4") == 2))
continue;
System.out.println("-----------" + outstr);
}
}
public String ChangeStr(String str) {
char arr[] = str.toCharArray();
char first = arr[0];
str = str.substring(1, str.length()) + first;
return str;
}
public static void main(String args[]) {
GetAll getall = new GetAll();
getall.AllOrder("1");
getall.AllOrder("3");
getall.AllOrder("4");
getall.AllOrder("5");
getall.OutAll();
}
}