地址 https://leetcode-cn.com/problems/combination-sum-iii/
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
解法 DFS 逐个尝试 本代码没加优化 性能一般
class Solution { public: vector<vector<int>> ret; void Dfs(int selectNum, int k, int n, vector<int>& v) { if (selectNum > 10) return; if (v.size() == k) { int sum = 0; for (auto e : v) { sum += e; } if (sum == n) { ret.push_back(v); } return; } v.push_back(selectNum); Dfs(selectNum + 1, k, n, v); v.pop_back(); Dfs(selectNum + 1, k, n, v); } vector<vector<int>> combinationSum3(int k, int n) { vector<int> v; Dfs(1, k, n, v); return ret; } };