当前位置: 首页 > news >正文

【LeetCode刷题】--40.组合总和II

40.组合总和II

image-20231122221405472

本题详解:回溯算法

class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len = candidates.length;List<List<Integer>> res = new ArrayList<>();if (len == 0) {return res;}// 关键步骤Arrays.sort(candidates);Deque<Integer> path = new ArrayDeque<>(len);dfs(candidates, len, 0, target, path, res);return res;}/*** @param candidates 候选数组* @param len        冗余变量* @param begin      从候选数组的 begin 位置开始搜索* @param target     表示剩余,这个值一开始等于 target,基于题目中说明的"所有数字(包括目标数)都是正整数"这个条件* @param path       从根结点到叶子结点的路径* @param res*/private void dfs(int[] candidates, int len, int begin, int target, Deque<Integer> path, List<List<Integer>> res) {if (target == 0) {res.add(new ArrayList<>(path));return;}for (int i = begin; i < len; i++) {// 大剪枝:减去 candidates[i] 小于 0,减去后面的 candidates[i + 1]、candidates[i + 2] 肯定也小于 0,因此用 breakif (target - candidates[i] < 0) {break;}// 小剪枝:同一层相同数值的结点,从第 2 个开始,候选数更少,结果一定发生重复,因此跳过,用 continueif (i > begin && candidates[i] == candidates[i - 1]) {continue;}path.addLast(candidates[i]);// 因为元素不可以重复使用,这里递归传递下去的是 i + 1 而不是 idfs(candidates, len, i + 1, target - candidates[i], path, res);path.removeLast();}}
}

相关文章:

  • 【shell脚本】全自动完成pxe无人值守批量装机脚本,匹配centos系列
  • Jetson JetPack-5.1.2-L4T-R35.4.1 修复deskew algorithm的问题
  • 基于Qt的UDP通信、TCP文件传输程序的设计与实现——QQ聊天群聊
  • Java Fasn 带您谈谈——开源、闭源
  • 利用Python进行数据分析【送书第六期:文末送书】
  • upload-labs关卡12(基于白名单的%00截断绕过)通关思路
  • Modbus转Profinet网关在大型自动化仓储项目应用案例
  • HTML玩转超链接a标签
  • linux 内存回收代码注释(未实现多代lru版本)
  • java_函数式接口
  • 浪潮信息云峦服务器操作系统KeyarchOS体验与实践
  • TensorFlow实战教程(二十八)-Keras实现BiLSTM微博情感分类和LDA主题挖掘分析
  • Flutter笔记:Matrix4矩阵变换与案例
  • 【前端】vue中合并表格行
  • MySQL 8.2 Command Line Client打开时一闪而过闪退问题
  • ➹使用webpack配置多页面应用(MPA)
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Spring-boot 启动时碰到的错误
  • Vue.js 移动端适配之 vw 解决方案
  • Webpack 4x 之路 ( 四 )
  • 警报:线上事故之CountDownLatch的威力
  • 如何选择开源的机器学习框架?
  • 三栏布局总结
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • gunicorn工作原理
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #android不同版本废弃api,新api。
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #pragma data_seg 共享数据区(转)
  • #stm32整理(一)flash读写
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4)(4.6) Triducer
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net环境下的缓存技术介绍
  • .NET面试题(二)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net下简单快捷的数值高低位切换
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ C++ ] STL_list 使用及其模拟实现
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [C++]指针与结构体