请参阅以下链接中的代码: https://stackoverflow.com/a/20614037/1676147
我的想法:
这里的时间复杂性取决于两个因素: 1)递归调用的数量:O(n)其中n是原始输入字符串中的字符数
2)两个for循环中涉及的工作:O(n!)?
基本上,第一个for循环是迭代set'permSet'中的每个字符串 n个字符串的排列数可以是n!。 因此,这个集合将包含n!字符串。正确的吗?
第二个for循环在每个循环中放置一个字符(代码中的变量'a') 每个字符串中的潜在位置。
我很困惑这一步。
答案 0 :(得分:0)
您的分析是正确的。对于长度 N 的字符串,您有N-1次递归,字符串长度 M ,长度 1 到各一次N-1 即可。每个递归处理一个大小(M-1)!列表,并在每个 M 位置(0到M-1)插入下一个字符。
每次通话都有时间M *(M-1)!或M!在M = 1到N之间求和。
1! + 2! + 3! + ... + N!
此总和 O(n!)。