生成全排列的方法在网上有好多种,m中选出n个数的方法也有很多,多数是采用递归的方式,但实际上这两种问题都可以归结为同一个问题:m个数中可能出现的所有可能数。例如:1 ,2可以出现的所有数有:1,2,12,21
对所有可能出现的数的长度加以限制就可以变成生成全排列的问题或者m中选出n个数的排列组合问题
java的实现代码如下:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class test {
static int limitMin;
static int limitMax;//挑出长度小于等于max且大于min的字符串排列组合
static void func(List mylist,String prefix)
{
if(prefix.length()>=limitMin&&prefix.length()<=limitMax)
System.out.println(prefix);//只有满足长度要求才输出,
for(int i=0;i<mylist.size();i++)
{
List temp=new LinkedList (mylist);//
func(temp,prefix+temp.remove(i));//将第i个数加到已处理的字符串后
}
}
//……MAIN函数在此
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String []arry={"1","2","3","4","5"};
limitMin=5;//限制最小长度
limitMax=5;//限制最大长度
func(Arrays.asList(arry),"");
}
运行结果:
设定为全为3,则为5个数中选出3个数的排列组合问题
limitMax=3;
limitMin=3;
运行结果: