题目

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

candidates 中的每个数字在每个组合中只能使用一次。

思路

此题思路与39题类似,利用回溯的方式,但是难点在于不能重复利用。

避免重复要让同一层级不出现相同的元素,却允许了不同层级之间的重复相同元素:

1
     / \
   2     2               这种情况不会发生
  /       \
 5          5

1
     /
   2                     这种情况确是允许的
  /
2

因此在剪枝时,需要将重复的元素删除。

算法:

1.对candidates进行排序

2.回溯函数combination:索引i,当前数组tmp,下一目标target:

  2.1 当target == 0时,满足条件,tmp添加进入result

  2.2 剪枝 当索引等于candidates长度的时候,已经结束,return;当target < candidates[i]的时候,后续也不存在满足的结果,因此剪枝,return。

  2.3 调用后续元素(不允许重复),在j遍历区间[i,n)中:

    2.3.1 剪枝 当j>idx 且candidates[j]==candidates[j-1]时,会调用重复的元素,将其删除

    2.3.2 调用下一元素

实现

class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
if(not candidates):
return []
n=len(candidates)
result=[]
candidates.sort() def combination(idx, tmp, target):
print(idx, tmp, target)
if target == 0 :
result.append(tmp)
return
if idx == n or target < candidates[idx]:
return
for j in range(idx, n):
if j>idx and candidates[j]==candidates[j-1]:
continue
combination(j+1, tmp+[candidates[j]],target-candidates[j]) combination(0,[],target)
return result

最新文章

  1. txt文本变成html
  2. HDU 1051 Wooden Sticks
  3. android 在线升级借助开源中国App源码
  4. php之aop实践
  5. 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结 转载
  6. 【重要】ASCII码表
  7. iOS App Launch Option
  8. ###STL学习--标准模板库
  9. Hibernate4 clob字段存取
  10. 为人们服务的asp.net 验证控件
  11. linux命令之crontab详解
  12. Parse Fatal Error at line 41 column 24: 元素类型 &quot;url-pattern&quot; 必须由匹配的结束标记 &quot;&lt;/url-pattern&gt;&quot; 终止
  13. JAXB注解的使用详解
  14. runAllManagedModulesForAllRequests
  15. vue文档全局api笔记2
  16. codeforces433B
  17. 图解http pdf
  18. sql查询与修改数据库逻辑文件名,移动数据库存储路径
  19. 怎么用Python写爬虫抓取网页数据
  20. android面试(4)---文件存储

热门文章

  1. Bytom Dapp 开发笔记(一):架构设计
  2. 如何解决java高并发详细讲解
  3. DB2 创建存储过程保存:XX 后面找到异常标记 &quot;END-OF-STATEMENT&quot;。
  4. AlgorithmMan,一套免费的算法演示神器
  5. Cobalt Strike简单使用
  6. 修改linux 动态ip为静态ip
  7. 关于Java的对象,锁和对象的内存布局、访问定位
  8. 微信公众号请求code时报redirect_uri 参数错误
  9. 团队作业3 需求改进&amp;系统设计(银河超级无敌舰队)
  10. IDEA创建动态Web项目