我想帮助解决这个问题。
我认为最好的方法是生成给定字符集的幂集,然后找到电源集中每个设置可以生成的字符串组合集。
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