子集

題解:
我們從給的示例中可以看出,子集與組合的區(qū)別了,組合其實(shí)是在求樹形結(jié)構(gòu)的葉子節(jié)點(diǎn),子集其實(shí)在求樹所有的節(jié)點(diǎn)
1.遞歸方法的傳參
題目中給定的集合nums,取過的元素不能重復(fù)取,因此需要一個(gè)start_index
2.終止條件
剩余集合為空的時(shí)候,就是終止的時(shí)候,也就是start_index >= len(nums),其實(shí)也可以不用加終止條件,因?yàn)榍懊娴臈l件滿足就是本層for循環(huán)結(jié)束
3.單層搜索邏輯
就是添加到path中,然后遞歸,然后回溯的過程,不需要剪枝
代碼:

子集ii

題解:
本題和上面的不同之處在于,給定的集合中是有重復(fù)數(shù)字的,那就涉及到一個(gè)去重的問題
1.遞歸方法的參數(shù)
除了nums,start_index外,我們需要一個(gè)used來標(biāo)記,當(dāng)前下標(biāo)的數(shù)字是否已經(jīng)使用過
代碼:
