力扣算法刷题Day25|回溯:组合总和III 电话号码的字母组合

力扣题目:#216.组合总和III

刷题时长:30min

解题方法:回溯

复杂度分析

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

问题总结

  • for循环内的调用的递归函数中,startIndex应为i+1。startIndex(int)为下一层for循环搜索的起始位置。
  • 剪枝优化for循环中i的终止边界少加1

本题收获

  • 两处剪枝优化
    • if sum(path) > targetsum, return
    • for i in range(startIndex, 10-(k-len(path))+1)

力扣题目:#17.电话号码的字母组合

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

解题方法:哈希表+回溯

复杂度分析

  • 时间O(3^m * 4^n),其中 m 是对应四个字母的数字个数,n 是对应三个字母的数字个数
  • 空间O(3^m * 4^n)

问题总结

  • append答案时没有重新拷贝,而是引用了原容器,导致最终答案都为空

本题收获

  • 哈希表用二位数组实现,索引即号码,元素即字母(string二维)
  • 一个集合的组合(#77 #216) vs 不同集合的组合(本题)
    • 一个集合:用startIndex参数确定下一层for循环搜索的起始位置
    • 不同集合:用index参数遍历题目给的字符串,依此切换对应的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值