回溯算法-全排列
回溯本质
解决一个 回溯问题,其实就是一个决策树的遍历问题,需要思考以下3个问题:
- 路径:已经做出的选择
- 选择列表:当前可以做的选择
- 结束条件:到达决策树底层,无法选择
代码框架
res = [] def backtrack(路径,选择列表): if 满足结束条件: res.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径,选择列表) 撤销选择
全排列问题
代码实现
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异