问题是:给定一个可能包含重复项的数字集合,请返回所有唯一排列。
天真的方法是使用一组(在C ++中)保存排列。这需要O(n!×log(n!))时间。有更好的解决方案吗?
最简单的方法如下:
O(n! * <complexity of finding next permutaion>)
1, 2, 2, 3 1, 2, 3, 2 1, 3, 2, 2 2, 1, 2, 3 2, 1, 3, 2 2, 2, 1, 3 ...
查找下一个词典编排是O(n),并且在维基百科页面上以词典编排顺序在Generation标题下给出了简单的排列描述。如果您有雄心壮志,则可以使用简单的更改在O(1)中生成下一个排列