递归和回溯_leetcode40-经典的组合去重问题

时间:2019-03-19
本文章向大家介绍递归和回溯_leetcode40-经典的组合去重问题,主要包括递归和回溯_leetcode40-经典的组合去重问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
class Solution(object):
def combinationSum2(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
self.res = []
self.old = None

candidates = sorted(candidates)


self.generateCombinatio(candidates,target,0,[])

print self.res

return self.res



def generateCombinatio(self,candidates,target,start ,ans):

if sum(ans) == target:
self.res.append(ans[0:])
return

if sum(ans) > target:
return



if self.old == None:

for i in range(start,len(candidates)):
if candidates[i] != self.old:
ans.append(candidates[i])
self.generateCombinatio(candidates,target,i+1,ans)
self.old = ans.pop()
else:
continue

else:
for i in range(start, len(candidates)):

if candidates[i] != self.old:
ans.append(candidates[i])
self.generateCombinatio(candidates, target, i + 1, ans)
self.old = ans.pop()
else:
continue



s = Solution()
can = [10,1,2,7,6,1,5]
tar = 8

s.combinationSum2(can,tar)