LeetCode-40-组合总和 II

原题链接:https://leetcode-cn.com/problems/combination-sum-ii/

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。


image.png

解题思路:

  1. 思路同:https://leetcode-cn.com/problems/combination-sum/
  2. 不同点在于需要区分重复的情况,加了条判断if i > start and candidates[i - 1] == candidates[i]: continue,即第一轮遍历到第二个1时,因为前一个值为1,跳过该轮次,即避免了[1,2,5]重复出现的情况。

Python3代码:

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        res = []
        candidates.sort()
        def func(start, track, target):
            for i in range(start, len(candidates)):
                if candidates[i] == target:
                    track.append(candidates[i])
                    res.append(track)
                    return 
                if i > start and candidates[i - 1] == candidates[i]:
                    continue
                if candidates[i] < target:
                    func(i+1, track+[candidates[i]], target-candidates[i])
                if candidates[i] > target:
                    return 
        func(0, [], target)
        return res
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数...
    minningl阅读 1,098评论 0 0
  • 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为...
    大号密码还没有想起来阅读 548评论 0 0
  • 本题和第77,39题一样都可以用回溯算法进行解决。代码的格式与前两题很相似。 给定一个数组 candidates ...
    东方1996阅读 1,488评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 12,186评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 13,585评论 0 11