首页 > 其他分享 >代码随想录 day27 组合总和 组合总和 II 分割回文串

代码随想录 day27 组合总和 组合总和 II 分割回文串

时间:2024-01-22 17:25:23浏览次数:25  
标签:used 组合 candidate 元素 随想录 回文 总和

组合总和

其实总的思路和前面几类组合问题区别不大
本题由于说明了元素可以重复选取 且无需考虑sum为0的情况
只需要把边界的startIndex迭代从i + 1 变成 i 即可
i表示可以选取元素本身

很容易写出以下未进行剪枝的代码

剪枝情况只是多了一种 也就是sum + 下一个候选元素 > target的时候直接略过本次循环 这里需要对候选数组进行排序

组合总和 II

本题和Ⅰ的区别就是这里不能选取同样的元素 也就是需要进行去重操作
重点在于这个使用的used数组 首先candidates需要进行排序 然后used全部初始化为false
这样我们在选取元素的时候 把它置为true 在我们回溯的时候置为false
实际上这样表示了 在同一个枝条下进行递归时 选择了的元素是始终为true的 如果candidate[i] == candidate[i - 1]也没有关系
因为这里实际上说明了candidate数组有重复元素 我们只不过只能使用一次而已 表现在used数组就是used[i - 1]是true
但是如果发现used[i - 1]是false 并且 candidate[i] == candidate[i - 1] 这就说明我们使用了同个元素两遍
这个去重操作是本题的难点


以下是不用used数组直接利用下标进行去重

分割回文串

对字符串操作要熟悉
这里还有顺便考察了一下回文串的判断
利用双指针前后比较就很快写出来

实际是和前面组合是一个思路
这里还不需要考虑去重

标签:used,组合,candidate,元素,随想录,回文,总和
From: https://www.cnblogs.com/mingtiao/p/17980499

相关文章

  • [省选联考 2020 A 卷] 组合数问题(斯特林数)
    题面计算\[\left(\sum_{k=0}^{n}f(k)\timesx^k\times\binom{n}{k}\right)\bmodp\]的值。思路因为模数为合数,不能求逆元,要把组合数的分母消掉。\(x^k\)似乎不能做什么,\(f(k)\)的操作空间似乎很大首先将\(f(k)=\sum_{i=0}^{m}a_ix^i\)转化为\(f(k)=\sum_{i=0}^{m}b_ix^......
  • 17. 电话号码的字母组合(中)
    目录题目题解:回溯题目题解:回溯classSolution:defletterCombinations(self,digits:str)->List[str]:ifnotdigits:#检查输入的数字串digits是否为空return[]a={"2":"abc","3":"def","4"......
  • 代码随想录算法训练营第 十 一 天| 20. 有效的括号 1047. 删除字符串中的所有相邻重
    LeetCode 20.有效的括号题目链接:20.有效的括号思路:采用栈数据结构解题;遇到左括号,压右括号入栈 LeetCode 1047.删除字符串中的所有相邻重复项题目链接:1047.删除字符串中的所有相邻重复项注意:Java中队列实现类API的使用 LeetCode 150.逆波兰表达式求值题目链......
  • 代码随想录算法训练营第十天| 232.用栈实现队列 225. 用队列实现栈
    LeetCode232.用栈实现队列题目链接:232.用栈实现队列思路:用两个栈实现队列 LeetCode  225.用队列实现栈 题目链接:225.用队列实现栈 思路:一个队列对栈进行实现(实现栈中的方法) ......
  • 代码随想录 day25 组合总和Ⅲ 电话号码的字母组合
    组合总和Ⅲ跟组合总和Ⅰ很像这里固定了是1-9的范围而且确定了取k个数字那么就是确定了树的高度和宽度注意一下回溯的写法和边界条件就好还有剪枝操作如下其实就是当sum已经大于n就不需要再进行了电话号码的字母组合这题就是一般的回溯问题难点其实是在这投影怎么......
  • 代码随想录 day24 回溯初体验
    组合熟悉一下回溯算法的基本流程以下是未曾进行剪枝处理的代码为什么要进行剪枝呢因为有一些情况是显然不可能成立的如下既然要取4个元素那么当取了1个元素之后集合剩余的元素不足4个不可能满足要求直接舍去具体边界思考路径剪枝代码如下......
  • [代码随想录] 第九天
    232.栈实现队列[https://leetcode.cn/problems/implement-queue-using-stacks/description/]思路:无classMyQueue{Stack<Integer>stackIn;Stack<Integer>stackOut;inttemp;publicMyQueue(){stackIn=newStack<>();......
  • [代码随想录] 第八天
    28.找出字符串中第一个匹配项的下标[https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/]思路:KMP算法,重点在于求NEXT数组。还不能理解..暂时先背下来了。classSolution{publicintstrStr(Stringhaystack,Stringneedle......
  • 组合模式
    定义一个类(或抽象类),类里面有一堆的自己,进行各种操作,适合树形结构的场景定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端对单个对象和组合对象保持一致的处理方式类型:结构型适用场景:客户端可以忽略组合对象与单个对象的差异时处理一个树形结构时......
  • 西门子PLC+国产远程IO的通讯组合的应用优势
    目前,市面上最常见的PLC+远程IO的配置是西门子PLC+国产PROFINET从站。这样做既保证了整个系统的稳定性,又保证了整个系统的性价比。国产远程IO的优势是性价比高,适配性广,可以兼容市面上常见的PLC品牌,国产IO集成了EtherCAT、PROFINET、EtherNETIP、CCLINK,总线种类丰富,经过多年的深耕,国......