java实现C(m n)_从集合m个数据中选出n个无序数据集合,即数学公式C(m,n)的java实现...

主要思想是采用了递归。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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值