Permutations

medium

Given a collection of distinct integers, return all possible permutations.

Example:

Input:
 [1,2,3]

Output:

[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

Analysis

经典Backtracking问题,除了常规模板的add - backtrack - remove循环,LeetCode官方给的解法中是用了一个swap的方法。

Solution

Backtracking - Add Remove (6ms 34.59%)

这个方法很直观,但是复杂度怎么分析呢?每进入一个permuteHelper()就需要进行O(n)循环,但是进入下一层permuteHelper会减少一个,因为本层中使用了一个nums[i],会在下一层中跳过上一层用过的数字,而这个树状结构有多少层呢?因为只有在list.size() == nums.length的时候才会返回,因此总共有n层,而各层汇总之后: n * (n - 1) * (n - 2) * ... * 2 * 1

也就是O(n!)的时间复杂度。当然也可以用全排列的本身数学性质得到这一点。

Backtracking - Swap - LeetCode Official (4ms 90.37%)

Time complexity : O(N!) to build N! solutions.

Space complexity : O(N!) since one has to keep N! solutions.

Last updated

Was this helpful?