java字符串长度等于n_在Java中生成给定N个字母的长度为2到N的字符串的排列

我想帮助解决这个问题。

我认为最好的方法是生成给定字符集的幂集,然后找到电源集中每个设置可以生成的字符串组合集。

List allPermutationsOfSubsequences( Set chars ) {

Set < Set > powerSetOfChars = generatePowerSet ( chars );

List permutations = new ArrayList ();

for (Set subsequence : powerSetOfChars)

permutations.addAll( generatePermutations ( subsequence ) );

return permutations;

}

Set > generatePowerSet ( Set set ) {

Set < Set > powerSet = new HashSet < Set > ();

if (set.size() == 0) {

powerSet.add(new HashSet ());

return powerSet;

}

Character anElement = set.iterator().next();

set.remove(anElement);

for (Set subset : powerSet(set)) {

Set setWithElement = new HashSet ();

setWithElement.add(anElement);

setWithElement.addAll(subset);

powerSet.add(newSet);

powerSet.add(subset);

}

set.add(anElement);

return powerSets;

}

//Generates a list of permutations of the characters provided in the set.

List generatePermutations ( Set chars );generatePowerSet方法创建所有集合,因此它还包括大小为0和1的集合。如果您愿意,可以删除它们,但主要思想就在那里。

样本输出:[3,2,1,31,13,32,23,21,12,321,312,231,213,132,123]

您需要做的就是删除1号的那些。

对于完整的代码,已经编译并显示可以工作,只需到这里自己试一试!

http://pastebin.com/P3YMmT2m

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值