主要思想是采用了递归。C(m, n)=C(x,y)+C(m-x,n-y);话不多说,例如从{a,b,c,d}集合中选出任意两个不重复的数据,其结果为,
ab、ac、ad、bc、bd、cd先直接上代码:
public class GetPartFormString {
public static void main(String[] args) {
//System.out.println(alignmentString("ghjksdghu"));
ArrayList ss = getPartStepOne(2,"abcd");
for(String s : ss)
{
System.out.println(s);
}
}
private static ArrayList getPartStepOne(int num,String s)
{
return getPart(num,alignmentString(s));
}
private static String alignmentString(String s)
{
char[] c = s.toCharArray();
for(int i=0; i
{
for(int j=i+1; j
{
if(c[i]>c[j])
{
char t = c[i];
c[i] = c[j];
c[j] = t;
}
}
}
return new String(c);
}
private static ArrayList getPart(int num,String s)
{
ArrayList finalss = new ArrayList();
if(num == 1)
{
char[] c = s.toCharArray();
String laststr = "";
for(int i=0; i
{
String newstr = new String(c, i, 1);
if(laststr.equals(newstr))
continue;
laststr = newstr;
finalss.add(newstr);
}
return finalss;
}
if(num >= s.length())
{
finalss.add(s);
return finalss;
}
int len = s.length();
char lastc = ' ';
for(int i=0; i
{
char c = s.charAt(i);
if( lastc == c)
continue;
lastc = c;
ArrayList al = getPart(num-1,s.substring(i+1));
for(String ss : al)
{
finalss.add(c+ss);
}
}
return finalss;
}
}