课程内容回顾:
回溯法
递归模板
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = [] #存放符合条件结果的集合
path = [] #用来存放符合条件的结果
used = [] #用来存放已经用过的数字
def backtrack(nums,used):
if len(path) == len(nums):
return res.append(path[:]) #此时说明找到了一组
for i in range(0,len(nums)):
if nums[i] in used:
continue #used里已经收录的元素,直接跳过
path.append(nums[i])
used.append(nums[i])
backtrack(nums,used)
used.pop()
path.pop()
backtrack(nums,used)
return res
题目1、全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result=[] # 用来存储结果
L=[] # 用来记录每次序列的数字
length=len(nums)
self.index=0 # 使用index 减少比较时求长度的次数
def dfs():
if self.index==length:
result.append(L[:])
else:
for i in range(length):
if nums[i] not in L:
L.append(nums[i])
self.index+=1
dfs()
L.pop()
self.index-=1
dfs()
return result