(注:本篇文章算法思想借鉴大佬微信公众号:labuladong)
几道典型问题:
一.46. 全排列
回溯树:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
if not nums:
return nums
#记录路径
res=[]
def backtrack(nums,temp):
#触发条件
if not nums:
# 错误写法 result.append(tem_result[]) 这样把地址传入,后面回退的时候会是一堆空列表
res.append(temp[:])
n=len(nums)
for i in range(n):
#做选择
temp.append(nums[i])
#进入到下一层的决策树
backtrack(nums[:i]+nums[i+1:],temp)
#取消选择
temp.pop()
backtrack(nums,[])
return res
二.面试题 08.12. 八皇后
还是全排列的思想。
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
res=[]
board=[['.']*n for _ in range(n)]
def backtrack(board,row):
#结束条件
if row==n:
temp=[]
for ch in