46. Permutation
https://leetcode.com/problems/permutations/
solution
递归往下一层时,需要排除已经排过的元素,因此需要标记visited
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
path = []
res = []
used = [False] * len(nums) # 非重复的,也可以用list/set 检查是否包含在list中,但如果有重复,这种记录位置的更好
self.dfs(nums, path, res, used)
return res
def dfs(self, nums, path, res, used):
if len(path) == len(nums):
res.append(path[:])
return
for i in range(0, len(nums)):
if used[i]:
continue
path.append(nums[i])
used[i] = True
self.dfs(nums, path, res, used)
path.pop()
used[i] = False时间复杂度:O(n!) 空间复杂度:O(n)
follow up
时间复杂度:O(n!) 空间复杂度:O(n)
Last updated