【lc刷题】40 组合总和 II_Day28(88/300)

88/300

  1. 组合总和 II
    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
     
    candidates 中的每个数字在每个组合中只能使用一次
     
    说明:
     
    所有数字(包括目标数)都是正整数。
    解集不能包含重复的组合。

    示例 1:
     
    输入: candidates = [10,1,2,7,6,1,5], target = 8,
    所求解集为:
    [
    [1, 7],
    [1, 2, 5],
    [2, 6],
    [1, 1, 6]
    ]
    示例 2:
     
    输入: candidates = [2,5,2,1,2], target = 5,
    所求解集为:
    [
    [1,2,2],
    [5]
    ]
     
    input: candidates = [1,1], target = 1
    output:[[1]]

在这里插入图片描述

类似题目:
46 全排列
47 全排列 II
78 子集
90 子集 II

思路:
39 组合总和的高阶版
多了两个点:排除自己&去重

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        candidates.sort()
        lst = []
        
        for i, c in enumerate(candidates):
            if target > c :
                for m in self.combinationSum2(candidates[i+1:], target - c):
                    x = [c]+m
                    if not x in lst:
                        lst.append(x)
            elif target == c:
                x = [c]
                if not x in lst:
                    lst.append(x)     
            else:
                break
                
        return lst


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值