活跃农民
- 积分
- 318
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-12-2
- 最后登录
- 1970-1-1
|
hi,我的理解来看,这个解法时间复杂度不是n!,而是O(n * n!)。
leetcode里给出的solution提供了这个解法:
- class Solution {
- public void backtrack(int n,
- ArrayList<Integer> nums,
- List<List<Integer>> output,
- int first) {
- // if all integers are used up
- if (first == n)
- output.add(new ArrayList<Integer>(nums));
- for (int i = first; i < n; i++) {
- // place i-th integer first
- // in the current permutation
- Collections.swap(nums, first, i);
- // use next integers to complete the permutations
- backtrack(n, nums, output, first + 1);
- // backtrack
- Collections.swap(nums, first, i);
- }
- }
- public List<List<Integer>> permute(int[] nums) {
- // init output list
- List<List<Integer>> output = new LinkedList();
- // convert nums into list since the output is a list of lists
- ArrayList<Integer> nums_lst = new ArrayList<Integer>();
- for (int num : nums)
- nums_lst.add(num);
- int n = nums.length;
- backtrack(n, nums_lst, output, 0);
- return output;
- }
- }
复制代码
这个时间复杂度大于n!,小于n*n!,可以去leetcode看一下哈 |
|