leetcode 216. Combination Sum III

来源:互联网 发布:如何优化404页面 编辑:程序博客网 时间:2024/06/05 19:33

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]]

求出1~9所有和为N的K个数,不能重复,不需要连续。

建立一个函数,1~9中一个个推进,分别递归调用自己,如果vec已满足K个数,和为N则push_back到res,否则跳出递归,进行for的下一个递归。

小Tips,可以根据目前vec最后的一个数来判断已递归到1~9中的第几个,然后直接对其+1就是需要在这个递归中for的起始点。

代码

class Solution {public:void combinationSum(int k, int n, vector<int>& vec, vector<vector<int>>& res){if (n == 0){if (k == 0)res.push_back(vec);return;}int small;if (vec.empty())small = 0;elsesmall = vec.back();for (int index = small+1; index <= k / n && index<=9; ++index){vec.push_back(index);combinationSum(k - index, n - 1, vec, res);vec.pop_back();}}vector<vector<int>> combinationSum3(int n, int k){vector<int> vec;vector<vector<int>> res;combinationSum(k, n, vec, res);return res;}};




0 0
原创粉丝点击