这是我关于StackOverflow的第一个问题。
我需要找到大小为n的唯一排列,这些排列将具有独特的元素。我已经为此编写了一个逻辑(现在它仅限于3),但它很慢,因为在最坏的情况下,它给出了n * n * n的复杂性。此外,它不适用于超过3的大小。
我应该怎么做才能降低复杂性,并使其适用于任何规模的排列?
例:
输入:
ABCD
输出:
A B C
A B D
A C D
B C D
(将列表添加到集合中会稍微提高速度,但它不会影响具有较少重复项的列表的时间复杂度)。
这是我的代码:
Set<String> permute(List<String> input, int limit) {
Set<String> one = new HashSet<>();
Set<String> two = new HashSet<>();
Set<String> three = new HashSet<>();
for (int i = 0; limit > 0 && i < input.size(); i++) {
one.add(input.get(i));
for (int j = i + 1; limit > 1 && j < input.size(); j++) {
String temp = input.get(i) + "-" + input.get(j);
two.add(temp);
for (int k = j + 1; limit > 2 && k < input.size(); k++) {
temp = input.get(i) + "-" + input.get(j) + "-" + input.get(k);
three.add(temp);
}
}
}
switch(limit) {
case 1:
return one;
case 2:
return two;
case 3:
return three;
default:
return new HashSet<>();
}
}
由于