您的位置:首页 > 其它

Leetcode之Combination SumII

2016-01-16 23:04 211 查看
与Combination Sum不同之处在candidates数组中的元素最多只能用一次,且结果集必须不含有重复元素,方法为:

当前元素跟前一个元素是相同的时候,如果前一个元素被取了,那当前元素可以被取,也可以不取,反过来如果前一个元素没有取,那我们这个以及之后的所以相同元素都不能被取。

class Solution(object):
def combinationSum2(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
result = []
lenofcan = len(candidates)
if lenofcan == 0:
return result
currentresult = []
index = 0
candidates.sort()
self.backtracking(candidates, index, target, result, currentresult, lenofcan)
return result

def backtracking(self, candidates, index, lefttarget, result, currentresult, lenofcan):
if lefttarget == 0:
result.append(currentresult)
return

if index > lenofcan - 1:
return

factor = lefttarget / candidates[index]
if factor == 0:
return

copylefttarget = lefttarget
for i in range(2):
skip = 1
copycurrentresult = copy.deepcopy(currentresult)
copylefttarget = lefttarget - i * candidates[index]
if i == 1:
copycurrentresult.append(candidates[index])
if i == 0:
while index + skip < lenofcan and candidates[index] == candidates[index + skip]:
skip += 1
self.backtracking(candidates, index + skip, copylefttarget, result, copycurrentresult, lenofcan)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: