39. 组合总和

题目

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

solution

一定要注意:收集结果的时候,因为是shallow copy,所以不能append(path)

class Solution:def __init__(self):self.res=[]self.path=[]def backtracking(self,candidates,targetsum,cursum,startindex):if cursum>targetsum:returnif cursum==targetsum:self.res.append(self.path[:])returnfor i in range(startindex,len(candidates)):cursum+=candidates[i]self.path.append(candidates[i])self.backtracking(candidates,targetsum,cursum,i)# 为了可重复利用 需要把已经选过的元素带上,所以这块是i不是i+1cursum-=candidates[i]self.path.pop()returndef combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:self.backtracking(candidates,target,0,0)return self.res

40. 组合总和 II

题目

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。

我的问题

我不会去重
Eg: candidates = [10,1,2,7,6,1,5], target = 8
candidate集合中有重复元素!!!!!!!
[1,2,6]=[2,6,1]

solution

去看视频,used数组真的很巧妙!!!!!!!!!!!!!!!!

class Solution:def __init__(self):self.res=[]self.path=[]def backtracking(self,candidates,target,cursum,startindex,used):if cursum>target:returnif cursum==target:self.res.append(self.path[:])returnfor i in range(startindex,len(candidates)):if i>=1 and candidates[i]==candidates[i-1] and used[i-1]==0:continuecursum+=candidates[i]used[i]=1self.path.append(candidates[i])self.backtracking(candidates,target,cursum,i+1,used)cursum-=candidates[i]used[i]=0self.path.pop()returndef combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:candidates.sort()#print(candidates)used=[0]*len(candidates)self.backtracking(candidates,target,0,0,used)return self.res

131.分割回文串(好难噢 想不到 虽然是模板题)

题目

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ]

solution

class Solution:def __init__(self):self.res=[]self.path=[]def ishuiwen(self,s):if s==[]:return Falseif s==s[::-1]:return Truereturn Falsedef backtracking(self,s,startindex):#print(s)if startindex>=len(s):self.res.append(self.path[:])returnfor i in range(startindex,len(s)):if self.ishuiwen(s[startindex:i+1]):     #应该是i+1,左闭右开self.path.append(s[startindex:i+1])self.backtracking(s,i+1)self.path.pop()else:continuereturndef partition(self, s: str) -> List[List[str]]:self.backtracking(s,0)return self.res

我的bug

if self.ishuiwen(s[startindex:i+1]): #应该是i+1,左闭右开
这一行一开始写成了i

Suzy找到实习了吗 Day27 | 回溯进行中:39. 组合总和,40. 组合总和 II,131.分割回文串相关推荐

  1. 131. 分割回文串(回溯算法)

    给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...

  2. leetcode 131. 分割回文串(dp+回溯)

    给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...

  3. LeetCode 131. 分割回文串(回溯)

    文章目录 1. 题目 2. 回溯 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: ...

  4. LeetCode 131. 分割回文串【字符串,回溯算法】

    131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = &q ...

  5. 【回溯法】python 实现 全排列,子集,组合问题、分割回文串

    leetcode39.40.47. 78. 77.131 目录 47:全排列 78:子集 39组合总和 40 组合总和 77组合 131 分割回文串 47:全排列 全排列问题:  使用回溯法,需要注意 ...

  6. leetcode131. 分割回文串(回溯)

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...

  7. Suzy找到实习了吗 Day24 | 回溯算法开始啦:回溯的理论知识,77组合(有一个问题没有解决)

    回溯算法理论 回溯算法解决的问题 组合问题 切割问题 子集问题 排列问题 棋盘问题 算法模板 函数没有返回值 业界给回溯算法命名:backtracking 算法伪代码模板 def backtracki ...

  8. Suzy找到实习了吗Day25 | 回溯算法进行时:216. 组合总和 III,17电话号码

    216. 组合总和 III 题目 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 .该列表不能包含相同的组合两次 ...

  9. Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素

    Suzy找到实习了吗 | 704. 二分查找.27. 移除元素 Leetcode 704:二分搜索 收获 Divide and conquer Recursive relation Python 3 ...

最新文章

  1. .net 小问题集合
  2. JS框架_(JQuery.js)纯css3进度条动画
  3. 快速pow和sqrt的小技巧 hdu4282
  4. python写抽奖转盘_[宜配屋]听图阁
  5. php启动端口修改,PHP_启动服务端口报错
  6. android中进行https连接的方式的详解
  7. 用python画图的作品_中学教案-python绘图
  8. Java之导入Excel 后端篇
  9. 伪装Apache版本防止入侵Web服务器
  10. 无法访问_win10纯净版提示无法访问文件或目录损坏的问题
  11. 机原自检——第7章 机械的运转及其速度波动的调节
  12. python计算平均值画折线图_【中年阿姨python入门】绘制折线图
  13. 如何用Word编辑参考文献(转)
  14. 【无人机三维路径规划】基于A算法解决三维路径规划问题含危险障碍地形含Matlab源码
  15. Excel分组行转列
  16. 【计算机毕业设计】123网上商城系统的设计与实现
  17. 玩转JetBot自动驾驶 (一)准备DIY零件清单
  18. JavaWeb图书商城 网上书城
  19. 关于My Sql如何导入数据
  20. 当今社会22大流行骗术曝光-请大家警惕

热门文章

  1. B1192 [HNOI2006]超级英雄Hero 二分图匹配
  2. 瓦克美国多晶硅基地爆炸 多晶硅及硅片或涨价
  3. 关于在打败C魔王前经常被背刺这件事(C语言常见问题描述及解决方案和原因)
  4. go语言微服务项目,基础篇--go4-聊天室
  5. 尼康相机测试软件mac版,Nikon Camera Control
  6. viper4android io错误,Go之Viper
  7. python破解md5_python怎么使用md5加密解密
  8. 通道(channel)
  9. JAVA面向对象编程(2)
  10. 【白话机器学习】算法理论+实战之决策树