力扣算法刷题Day29|回溯:递增子序列 全排列I&II

力扣题目:#491.递增子序列

刷题时长:参考题解后10min

解题方法:回溯 + set去重

复杂度分析

  • 时间 O(n * 2^n)
  • 空间O(n)

问题总结

  • 去重逻辑错,此题不能预先排序,且只能在树层层面去重

本题收获

  • 利用set()去重:难点在此set无需回溯,在每层递归时初始化为空集,才能用以记录每层树层中使用过的元素

力扣题目:#46.全排列

刷题时长:20min

解题方法:回溯(无startIndex)+ usedlist

复杂度分析

  • 时间O(n!)
  • 空间O(n)

问题总结

  • for循环内无需startIndex而应该从头开始遍历,通过usedlist记录元素是否已使用并跳过
  • 赋值用一个=即可,判断才用==

本题收获

  • 排列问题与组合的不同:1)每层都是从0开始搜索而不是startIndex;2)需要used数组记录path里都放了哪些元素了

力扣题目:#47.全排列 II

刷题时长:10min

解题方法:回溯(无startIndex)+ 去重(sort + usedlist)

复杂度分析

  • 时间O(n!)
  • 空间O(n)

问题总结

  • 去重之前忘记先排序

本题收获

  • 树枝去重:有序数组中前一位已用,即used[i-1] == 1时continue跳过此循环
  • 本题难点:题目集合中有重复元素,要求答案集中不含重复组
  • 收集结果:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值