我希望得到像字母表一样的字符串排列的特定组合。为了理解我,我将向您展示我使用的代码:
public class PermutationExample {
public static List<String> getPermutation(String input) {
List<String> collection = null;
if (input.length() == 1) {
collection = new ArrayList<String>();
collection.add(input);
return collection;
} else {
collection = getPermutation(input.substring(1));
Character first = input.charAt(0);
List<String> result = new ArrayList<String>();
for (String str : collection) {
for (int i = 0; i < str.length(); i++) {
String item = str.substring(0, i) + first
+ str.substring(i);
result.add(item);
}
String item = str.concat(first.toString());
result.add(item);
}
return result;
}
}
public static void main(String[] args) {
System.out.println(PermutationExample.getPermutation("ABCD"));
}
}
这段代码效果很好,我可以得到每个组合,我可以从列表中取出它,如果我需要第5个元素,我可以收到它。但如果字符串是字母......,没有用,那就太大了。我要做的就是从所有26个中获得1221的特定元素!组合?
答案 0 :(得分:1)
前一段时间我解决了类似的问题,只在python中解决了。
如果您需要的只是第n个排列,那么您可以做得更好,然后生成每个排列并返回第n个,如果您尝试仅考虑生成所需的排列。
你可以“简单地”通过弄清楚你想要的排列数量应该是前面的元素,然后是递归的剩余元素。
假设任何值的集合值[0,...,X],使得col [n]&lt; COL [N + 1] 对于N个元素,有N个!可能的排列,收集完全颠倒的情况。
我们将在每个(N-1)之后看到集合头部的变化!排列,所以如果n&lt; (N-1)!,头是头。然后,您有剩余的排列数,并且可以递归地应用相同的逻辑。
这有帮助吗?我知道这是相当高的水平,你必须考虑一下,但也许它会让你走上正确的轨道。