全排列
时间:2023.9.27
题目地址:全排列
题目介绍
题目分析
全排列是回溯算法的经典题型,直接用回溯就行了。
优化一下算法的话对于这题,剪枝就是用记忆搜索就行了,减少重复的。
代码
"""全排列"""
def backtrack(choices, state, selected, res):
if len(state) == len(choices):
res.append(list(state)) # 通过list(state) 来创建state的副本,不能直接append(state),那样加的是引用。
return
for i, value in enumerate(choices):
if selected[i]:
continue
selected[i] = True
state.append(value)
backtrack(choices, state, selected, res)
state.pop()
selected[i] = False
state = []
# 记忆列表
selected = [False for _ in range(len(nums))]
res = []
backtrack(nums, state, selected, res)
return res