sta*_*low 4 algorithm combinations permutation
问题是:给定一组可能包含重复项的数字,返回所有唯一的排列。
天真的方法是使用一个集合(在 C++ 中)来保存排列。这需要O ( n ! × log( n !)) 时间。有更好的解决方案吗?
最简单的方法如下:
O(n lg n)O(n! * <complexity of finding next permutaion>)步骤 3 可以通过将下一个排列定义为如果排列列表已排序将直接出现在当前排列之后的排列来完成,例如:
1, 2, 2, 3
1, 2, 3, 2
1, 3, 2, 2
2, 1, 2, 3
2, 1, 3, 2
2, 2, 1, 3
...
Run Code Online (Sandbox Code Playgroud)
查找下一个字典排列是 O(n),维基百科页面上的排列在标题Generation in lexicographic order下给出了简单的描述。如果您感觉雄心勃勃,您可以使用简单的更改在 O(1) 中生成下一个排列