【发布时间】:2017-04-06 17:53:55
【问题描述】:
例如,字符串“AAABBB”将有排列: “阿巴布”, “巴巴巴”, “阿巴巴”, 等等
什么是生成排列的好算法? (它的时间复杂度是多少?)
【问题讨论】:
-
生成所有排列将花费你 O(n!) 其中 n 是字符串的长度。
-
@KaranNagpal:不会。它会小于
n!,并且取决于重复字母的数量。在AAABBB示例中,有 20 个唯一排列,而不是 720 个。 -
是的,20 = 6!/(3!*3!) ...您可以通过取长度的阶乘除以每个字母出现的阶乘得到排列的数量。
-
也可以使用位图来优化空间复杂度
标签: algorithm permutation