【算法】回溯解决排列、组合、子集问题

子集问题

力扣78——子集
元素无重复,不可以重复选
在这里插入图片描述
res,track
backtrack函数用start标识初时位置防止复选
basecase无脑加入res就可

力扣77——组合
元素无重复,不可以复选
在这里插入图片描述
res,track
backtrack函数用start标识初时位置防止复选,start初始用1
basecase如果track.size()=k,加入res

力扣46——全排列
元素无重复,不可以复选
在这里插入图片描述
res,track,used
backtrack函数
basecase如果track.size()=nums.length,加入res
做选择时,只有used没被用过才选择

力扣90——子集Ⅱ
元素有重复,不可重复选
在这里插入图片描述
res,track
先排序
backtrack函数用start标识初时位置防止复选
basecase无脑加入res
做选择时需要剪枝,相邻相同的数只需选一次

力扣40——组合总数Ⅱ
元素有重复,不可重复选
在这里插入图片描述
res,track,trackSum记录当前track中的数的和
先排序
backtrack函数用start标识初时位置防止复选
basecase两个,trackSum=sum加入res返回,trackSum>sum直接返回
做选择的时候需要剪枝,相邻相同的数只需选一次

力扣47——全排列Ⅱ
元素有重复,不可重复选
在这里插入图片描述
res,track,used
先排序
backtrack函数
basecase如果track.size()=nums.length,加入res
做选择时需要剪枝,相邻相同的数只需选一次,加入!used[i-1]保证元素的使用顺序

力扣39——组合总和
元素有重复,每个数可重复选
在这里插入图片描述
res,track,trackSum记录当前track中的数的和
backtrack函数用start标识初时位置防止复选
basecase两个,trackSum=sum加入res返回,trackSum>sum直接返回
做选择的时候dp的下一个用当前的i,而不是i+1,表示我这个数可以随便多少次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值