zoukankan      html  css  js  c++  java
  • LeetCode 40.组合总和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]
    ]

    class Solution:
        def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
            ans = []
            cur = []
            candidates = sorted(candidates)
            self.dfs(candidates,target,ans,cur,0)
            return ans
        def dfs(self,candidates,target,ans,cur,s):
            if 0 == target:
                ans.append(cur[::])
                return
            for i in range(s,len(candidates)):
                #print('ans:',ans,'cur:',cur,'s:',s)
                num = candidates[i]
                if num > target:
                    break
                else:
                    if i>s and candidates[i] == candidates[i-1]:
                        continue
                    cur.append(num)
                    self.dfs(candidates,target-num,ans,cur,i+1)
                    cur.pop()
    
  • 相关阅读:
    字符串转换整数 (atoi)
    Z 字形变换
    最长回文子串
    寻找两个有序数组的中位数
    二维码QRCode
    多个线程访问url
    store procedure 翻页
    store procedure example
    使用graphics2D给图片上画字符
    procedure的over(partition by ) function
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13285354.html
Copyright © 2011-2022 走看看