代码随想录算法训练营第27天 | 39.组合总和 、40.组合总和II和131.分割回文串

代码随想录算法训练营第27天 | 39.组合总和 、40.组合总和II和131.分割回文串

链接: 39.组合总和
链接: 40.组合总和II
链接: 131.分割回文串

自己看到题目的第一想法

39.组合总和:数字可以被无限选取,那么startIndex就不是像之前组合问题一样了。不管怎样先画树形图自己模拟一下流程,画树形图的时候明确了两个点:第一就是每个节点处剩下的集合是什么?第二个是树的宽度和深度由什么决定?根据回溯的算法模板和三部曲一步步写代码。
40.组合总和II: 我看示例的时候有个疑问:题目要求candidates中的每个数字在每个组合中只能使用一次,那么candidates本身有重复的数字是算一个数字还是多个数字呢?如果是多个数字,为什么在结果里不能各自区分不同?

看完代码随想录之后的想法

39.组合总和:递归函数参数:集合candidates,目标值target,path的和sum,for循环的起始位置startIndex。**什么时候用startIndex?**当每一层选取都在同一个集合时需要startIndex,因为当前path新增的元素会影响集合元素的选取,也就是for循环里变量i的起始是由递归函数上一个i决定的。这里的具体对应关系也体现在递归处理逻辑中递归函数的输入参数中对应startIndex处的变量。由于这道题目可以重复选择元素,所以函数处理逻辑里startIndex取i,而上一题不能重复选取的startIndex为i+1。
40.组合总和II:针对去重的逻辑,有一个很需要理解的点,在于树枝去重还是树层去重。树枝去重保证了单个结果中元素值不会重复,而树层去重保证了结果集合中结果不会重复。针对这道题目,单个结果中元素值可以重复而结果集合中结果不能重复,所以应该使用树层去重。树枝去重用break(直接结束循环),树层去重用continue(跳过语句进入下一次循环)。看到这里其实也解答了我的疑问,题目要求的是组合,我思考的虽然元素不同,但是对于结果集合来说,它们之间不能有重复的。怎样进行树层去重呢? 首先需要进行排序,保证相同的数位置相邻。使用标记数组来记录被选取的元素,如果当前搜索到的节点已经被访问过,也就是数值与上一个相同且上一个没有被用过,那么就直接跳过此次循环进入下一个循环。
131.分割回文串:切割问题与组合问题相似,切割线就是startIndex,注意是startIndex而不是i,i是变化的,而startIndex是不变的。结束条件就是startIndex比字符串大或者已经等于字符串长度了。如何记录切割子串呢?先判断是否是回文,需要再写一个函数判断回文,也就是从前往后开始到从后往前,字符串相同。如果是回文子串就加入path中。

自己实现过程中遇到哪些困难

39.组合总和:一些薄弱点是,第一,对于数组的增删改查API太久没有写代码忘记了。第二,对于递归函数的参数还不是很熟练,第三是对于startIndex控制剩余集合的操作不是很熟练,与上一题对比下,这一题的递归函数的startIndex不太一样。
最后一题确实难,需要反复去回顾。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值