我的代码的时间复杂度是多少?我通过www.leetcode.com运行了它,这是最佳选择。我认为它是O(n * n!)。首先,我认为它是O(n ^ 2 * n!):因为我们进行了n次递归调用,所以额外增加了n个。但是,只有对permute()的第一次调用才占主导地位,而自n以来,其余的都比其他方法相形见!!是>>>(n-1)!
非常感谢!
class Solution {
public List<List<Integer>> permute(int[] nums) {
return permute(nums, nums.length - 1);
}
private List<List<Integer>> permute(int[] nums, int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n < 0) {
List<Integer> permutation = new ArrayList<Integer>();
result.add(permutation);
return result;
}
// below returns (n-1)! results of size n-1 each
List<List<Integer>> prefixes = permute(nums, n-1);
for(List<Integer> prefix : prefixes) {
List<List<Integer>> permutations = insert(nums[n], prefix);
result.addAll(permutations);
}
return result;
}
// O(n^2) worst case when size of list is n-1
private List<List<Integer>> insert(int num, List<Integer> list) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(int i = 0; i <= list.size(); i++) {
List<Integer> clone = new ArrayList<Integer>();
clone.addAll(list);
clone.add(i, num);
result.add(clone);
}
return result;
}
}