Leetcode 组合总和II
组合总和II
题目描述:
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。
说明:1.所有数字(包括目标数)都是正整数。2.解集不能包含重复的组合。
题目链接
class Solution {private boolean[] used;private int[] candidates;private List<List<Integer>> result;private int target;private int len;public List<List<Integer>> combinationSum2(int[] candidates, int target) {// 回溯算法// 初始化this.len = candidates.length;this.used = new boolean[this.len];this.candidates = candidates;this.result = new ArrayList<List<Integer>>();this.target = target;Arrays.sort(this.candidates);// 去重核心一:一定要排序!DFS(0,0); // 第一个参数为当前的和,第二个参数为当前位置return this.result;}private void DFS(int sum,int begin){if(sum == this.target){List<Integer> temp = new ArrayList<Integer>();for(int i = 0 ; i<this.len ; i++){if(used[i]) temp.add(candidates[i]);}result.add(temp);return;}if(sum > this.target) return;for(int i = begin ; i<this.len ; i++){ // 遍历每个候选元素if(i>begin && candidates[i] == candidates[i-1]) continue; // 去重核心2:第一次遍历不会触发该条件,只有第二次及以上遍历才可能触发if(!used[i]){ // 1.判断第i+1个候选元素是否已经使用used[i] = true;DFS(sum+candidates[i],i+1); // 对下一个元素递归used[i] = false;}}}
}
典型的回溯算法,主要的难点为: candidates 中的每个数字在每个组合中只能使用一次,而组合里面的数字又可能重复。 所以我们事先需要对candidates数组进行排序处理,然后在for循环中添加去重的条件,即只要当前的candidates元素值等于上一个candidates元素值(i>begin下),那么都可以直接跳过当前的for循环,进入下一次for循环。读者可以试着纸上模拟,还是感觉有些难以理解的欢迎留言。
Leetcode 组合总和II相关推荐
- leetcode系列--40.组合总和 II
leetcode系列–第40题.组合总和 II 给你一个由候选元素组成的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合 ...
- leetcode 39. 组合总和 40. 组合总和 II
leetcode 39. 组合总和 40. 组合总和 II 组合总和 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和 ...
- ii 组合总和_40. 组合总和 II
题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
- Leetcode 组合总和 与 排列组合相关问题
Leetcode 组合总和 与 全排列相关问题 组合总和 题目链接: Leetcode 39.组合总和 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 c ...
- 力扣:组合总和 II DFS剪枝
组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合 ...
- 77.组合 | 40.组合总和II | 39.组合总和 | 784.字母大小写全排列
77.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], ...
- 005. 组合总和 II
1.题目链接: 40. 组合总和 II 2.解题思路: 树层:同层遍历 树枝:递归遍历 2.1.题目要求: 给定一个数组 candidates 和一个目标数 target ,找出 candidates ...
- Suzy找到实习了吗 Day27 | 回溯进行中:39. 组合总和,40. 组合总和 II,131.分割回文串
39. 组合总和 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 , ...
- LeetCode 40. 组合总和 II(排列组合 回溯)
1. 题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
最新文章
- 计算机网络实验课,【课堂】师生同上一节计算机网络实验课
- 3306端口_Spring Boot随机端口你都不会,怎么动态扩容?
- 10 大流行软件测试工具
- 求实数的绝对值。_例谈六种有关绝对值问题的解题方法
- python切换ip群发邮件_python获取外网IP并发邮件的实现方法
- saltstack 管理mysql_saltstack自动化运维系列④之saltstack的命令返回结果mysql数据库写入...
- mysql中设置字符,MySQL 修改默认字符集
- TQ WP7 Starter
- vue+elementui+quill富文本框+秀米编辑器和135编辑器
- 计算机专业线性代数教学大纲,线性代数(专业必修课)教学大纲(2018版)
- 中国历史人物传记数据库 CBDB 若干表简介
- centos7 搭建最新的RAP2接口管理工具并导入原rap旧数据
- pdf文件去除无用内容和链接
- 不是家电品牌!不是家装品牌!不是家居品牌!三翼鸟是啥?
- python递归函数
- 计算机组成与系统结构2018,计算机组成原理与系统结构2018-2019试卷a.doc
- 上海高中计算机知识点总结,上海高中高考数学知识点总结(大全)
- 开源巨献:Google最热门60款开源项目(转)
- 时光荏苒,白驹过隙。2018年总结!
- 人脸识别(一)调用face++实现人脸检测