LeetCode 0046. Permutations全排列【Medium】【Python】【回溯】【DFS】
Problem
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] ]
问题
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
思路
解法一
permutations函数
Python3代码
from itertools import permutations
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
# solution one: permutations
return list(permutations(nums)) 解法二
递归
已有的排列放入 path 中,当 nums 为空表示递归完成,再把 path 放入 res 中。
Python3代码
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
# solution two: recursion
res = []
self.dfs(nums, res, [])
return res
def dfs(self, nums, res, path):
if not nums:
res.append(path)
else:
for i in range(len(nums)):
self.dfs(nums[:i] + nums[i + 1:], res, path + [nums[i]]) 解法三
回溯
visited 数组表示是否访问过这个位置。
Python3代码
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
# solution three: backtracking
visited = [0] * len(nums)
res = []
def dfs(path):
if len(path) == len(nums):
res.append(path)
else:
for i in range(len(nums)):
if not visited[i]:
visited[i] = 1
dfs(path + [nums[i]])
visited[i] = 0
dfs([])
return res 
京公网安备 11010502036488号