模仿三角函数样式的程序基本都能形成全排列集合。
例如:4个点的组合---》4个点中每个点对应3个---》3个点中每个点对应2个---》其下就是一对一
全排列N-1个元素。
轮换所有N个元素。
重复以上步骤。
程序如下:
/**
* Edwin开发包
*/
package com.edwin.cn;
import java.util.ArrayList;
import java.util.List;
/**
* 返回字符全排列集合
* @author Edwin
* @version 1.1
*/
public class Anagram {
private static List lstForStore;
private static int intSize;
private static char[]charForInput;
/**
* 构造方法
* @param pTemp为全排列而传入的参数
*/
public Anagram(String pTemp){
charForInput=pTemp.toCharArray();
intSize=pTemp.length();
lstForStore=new ArrayList();
}
/**
* 返回一个排序后的List集合
* @return 排序后的List集合
*/
public List getAnagram(){
doAnagram(intSize);
return lstForStore;
}
/**
* 排序函数
* @param pSize为传入字符串大小
*/
private static void doAnagram(int pSize)
{
if(pSize == 1)
return;
for(int j=0; j<pSize; j++)
{
doAnagram(pSize-1);
if(pSize==2){
lstForStore.add(String.copyValueOf(charForInput));
}
rotate(pSize);
}
}//end of doAnagram method
/**
* 向左移动字符串
* @param pSize为传入字符串大小
*/
private static void rotate(int pSize)
{
int j;
int intPosition = intSize - pSize;
char charTemp = charForInput[intPosition];
for(j=intPosition+1; j<intSize; j++){
charForInput[j-1] = charForInput[j];
}
charForInput[j-1] = charTemp;
}//end of rotate method
}