diff --git a/README.md b/README.md index 20e9a434..558c8735 100644 --- a/README.md +++ b/README.md @@ -477,7 +477,7 @@ backtracking() { 大家好,我是程序员Carl,ACM 校赛、黑龙江省赛、东北四省赛金牌,和亚洲区域赛铜牌获得者,哈工大计算机硕士毕业,先后在腾讯和百度从事后端技术研发,CSDN博客专家。对算法和C++后端技术有一定的见解,利用工作之余重新刷leetcode。 -**加我的微信,备注:组队刷题**, 拉你进刷题群,每天一道经典题目分析,而且题目不是孤立的,每一道题目之间都是有关系的,都是由浅入深一脉相承的,所以学习效果最好是每篇连续着看,也许之前你会某些知识点,但是一直没有把知识点串起来,这里每天一篇文章就会帮你把知识点串起来。我也花了不少精力来整理我的题解,**而且我不会在群里发任何广告,纯自己学习和分享。 欢迎你的加入!** +**加我的微信,备注:「个人简单介绍」+「组队刷题」**, 拉你进刷题群,每天一道经典题目分析,而且题目不是孤立的,每一道题目之间都是有关系的,都是由浅入深一脉相承的,所以学习效果最好是每篇连续着看,也许之前你会某些知识点,但是一直没有把知识点串起来,这里每天一篇文章就会帮你把知识点串起来。我也花了不少精力来整理我的题解,**而且我不会在群里发任何广告,纯自己学习和分享。 欢迎你的加入!** diff --git a/pics/216.组合总和III.png b/pics/216.组合总和III.png new file mode 100644 index 00000000..cb40cd92 Binary files /dev/null and b/pics/216.组合总和III.png differ diff --git a/problems/0216.组合总和III.md b/problems/0216.组合总和III.md index 2cdf5dfe..87ed47e6 100644 --- a/problems/0216.组合总和III.md +++ b/problems/0216.组合总和III.md @@ -18,6 +18,34 @@ # 思路 +这道题目注意一下几点: + +* 解集不能包含重复的组合。 说明不用去重了,难度就小一些。 +* 求的是组合,那么集合没有顺序,for里面依然要从startIndex开始(如果是排列的话,就从0开始) + +本题k相当于限制了树的深度,9就是树的宽度。 + +选取过程如图: + + + +那么这还是一道标准的模板题,模板: + +``` +backtracking() { + if (终止条件) { + 存放结果; + } + + for (选择:选择列表(可以想成树中节点孩子的数量)) { + 递归,处理节点; + backtracking(); + 回溯,撤销处理结果 + } +} +``` + + # C++代码 @@ -25,30 +53,30 @@ class Solution { private: vector> result; - void backtracking(int target, int k, vector& vec, int num, int sum, int startIndex) { + vector path; + void backtracking(int target, int k, int num, int sum, int startIndex) { if (sum > target || num > k) { return; } if (num == k && sum == target) { - result.push_back(vec); + result.push_back(path); return; } for (int i = startIndex; i <= 9; i++) { sum += i; - vec.push_back(i); + path.push_back(i); num++; - backtracking(target, k, vec, num, sum, i + 1); + backtracking(target, k, num, sum, i + 1); num--; sum -= i; - vec.pop_back(); + path.pop_back(); } } public: vector> combinationSum3(int k, int n) { - vector vec; - backtracking(n, k, vec, 0, 0, 1); + backtracking(n, k, 0, 0, 1); return result; }