LeetCode Problem 46-Permutations

全排列。给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

1
2
3
4
5
6
7
8
9
10
输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

思路一

回溯法。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def backtrack(result, tmp, nums):
            if len(tmp) == len(nums):
                result.append(tmp)
                return
            for i in range(0, len(nums)):
                if nums[i] in tmp:
                    continue
                backtrack(result, tmp+[nums[i]], nums)
        result = []
        backtrack(result, [], nums)
        return result

思路二

回溯法的另一种写法,省去了判断元素是否存在的过程。

1
2
3
4
5
6
7
8
9
10
11
class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def backtrack(result, tmp, nums):
            if len(nums) == 0:
                result.append(tmp)
                return
            for i in range(0, len(nums)):
                backtrack(result, tmp+[nums[i]], nums[:i]+nums[i+1:])
        result = []
        backtrack(result, [], nums)
        return result

相似问题

  1. Next Permutation
  2. Permutations II
  3. Permutation Sequence
  4. Combinations
此时不赞何时赞!