代码随想录算法训练营第三十天|回溯总结、day1题目复习

提示


一、回溯总结

回溯一种暴力穷举法,效率不高,但是对于一些无限套for可能无法解决的问题能够轻易化解

for循环横向遍历,递归纵向遍历,回溯不断调整结果集,从而遍历每一种可能

  1. 组合问题
    • 在N个数中按照规则找出K个数的集合,收集的是叶子节点
    • 分为有重复元素和无重复元素,有重复元素需要排序去重,used数组或set
    • 终止条件通常为满足集合的条件
    • 剪枝的精髓在于for循环在寻找起点的时候要有一个范围,如果这个起点到集合终止之间的元素已经不够题目要求的k个元素了,就没有必要搜索了
  2. 排列问题
    • 全排列,N个数有多少种排列可能,收集叶子节点
    • 每层都是从0开始遍历,同时需要使用used数组记录使用过的元素,不能重复使用
    • 数组中有重复元素时,不仅要used数组去重,同时需要确保在下次递归时元素不会重复使用
  3. 切割问题
    • 切割问题类似于组合问题,用求解组合问题的思路求解切割问题
    • 在一个数组中切割,需要使用到startIndex,所以切割范围为[startIndex,i],截取子串判断是否符合条件
  4. 子集问题
    • N个数组成的数组有多少个子集,收集的是全部节点
    • 在终止条件之前,就要收集到结果集中,终止条件可以不加,for循环是由范围的
    • 数组中有重复元素是,需要排序去重,使用used数组

二、day1复习

有些生疏,问题不大


总结

对回溯有了一定得了解,还不是特别牢固,还得需要及时复习
学习时间90min。
学习资料:《代码随想录》

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值