Java 代码的时间复杂度是多少(生成排列)

Java 代码的时间复杂度是多少(生成排列),java,algorithm,recursion,complexity-theory,Java,Algorithm,Recursion,Complexity Theory,请参见下面链接中的代码: 我的想法: 这里的时间复杂性取决于两个因素: 1) 递归调用数:O(n),其中n是原始输入字符串中的字符数 2) 两个for循环所涉及的工作:O(n!) 基本上,第一个for循环是迭代集合“permSet”中的每个字符串 n个字符字符串的排列数可以是n!。 因此,此集合将包含n!串。对吗 第二个for循环在每个位置放置一个字符(代码中的变量“a”) 这些串中每个串的潜在位置 我对这一步感到困惑 你的分析是正确的。对于长度N的字符串,您有N-1个递归,字符串长度M,从1

请参见下面链接中的代码:

我的想法:

这里的时间复杂性取决于两个因素: 1) 递归调用数:O(n),其中n是原始输入字符串中的字符数

2) 两个for循环所涉及的工作:O(n!)

基本上,第一个for循环是迭代集合“permSet”中的每个字符串 n个字符字符串的排列数可以是n!。 因此,此集合将包含n!串。对吗

第二个for循环在每个位置放置一个字符(代码中的变量“a”) 这些串中每个串的潜在位置


我对这一步感到困惑

你的分析是正确的。对于长度N的字符串,您有N-1个递归,字符串长度M,从1N-1每个递归一个。每个递归处理一个大小列表(M-1)!,并在每个M位置(0到M-1)插入下一个字符

每次呼叫都有时间M*(M-1)!,或者我!将M=1和N相加

1! + 2! + 3! + ... + N!
这个总数是O(n!)