子集问题
力扣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,表示我这个数可以随便多少次