回溯算法-全排列

 


回溯本质

解决一个 回溯问题,其实就是一个决策树的遍历问题,需要思考以下3个问题:

  1. 路径:已经做出的选择
  2. 选择列表:当前可以做的选择
  3. 结束条件:到达决策树底层,无法选择

代码框架

res = []
def backtrack(路径,选择列表):
if 满足结束条件:
res.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径,选择列表)
撤销选择

全排列问题

image

代码实现

class Solution:
def permute(self,nums:List[int]) -> List[List[int]]:
size = len(nums)
ans = []
track = []
# nums:选择列表,track:当前路径
# 选择列表:nums 中不存在于 track 的那些元素
def backtrack(nums,track):
# 所有的数字都填完了,返回一个排列结果
if len(track) == len(nums):
ans.append(track[:])
return
for i in range(len(nums)):
if nums[i] in track:
continue
track.append(nums[i])
# 继续递归填入下一个数
backtrack(nums,track)
#撤销操作
track.pop()
backtrack(nums,track)
return ans
posted @   topbookcc  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
/* 鼠标点击求赞文字特效 */
点击右上角即可分享
微信分享提示