Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]] 题解:如果k被确定,即可通过k个循环,设置一个和为n并且各不相等来求组合解,由于k不固定即只能用递归求解,每当组合中第一个数i被确定时,即等于求剩下k-1个 和为n-i的第一个数,设置k=0并且n=0即可求解。 代码:class Solution { public: vector<vector<int>> combinationSum3(int k, int n) { vector<vector<int> > res; vector<int> out; combinationSum3DFS(k, n, 1, out, res); return res; } void combinationSum3DFS(int k, int n, int level, vector<int> &out, vector<vector<int> > &res) { if (n < 0) return; if (n == 0 && out.size() == k) res.push_back(out); for (int i = level; i <= 9; ++i) { out.push_back(i); combinationSum3DFS(k, n - i, i + 1, out, res); out.pop_back(); } } };