您的位置:首页 > 其它

[LeetCode]problem 216. Combination Sum III

2016-06-08 08:46 141 查看

TAG

递归

回溯

组合数和

link

方法

Combination Sum1Combination Sum2相比,就是上述两个问题的综合,再稍有限制:

候选集是
set
(1-9)

每个数字只能用一次(组合中各数字是unique)

限制: 必须是k个数。

想想,还是很简单的。加上必要的判断和剪枝即可。

代码

class Solution {
public:
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int>> result ;
vector<int> selectedNums;
selectNum(k, selectedNums, n, result);
return result;
}
private:
void selectNum(int k,
vector<int> ¤tSelectedNums,
int target,
vector<vector<int>> &result,
size_t startPos=1)
{
if(currentSelectedNums.size() > k){ return ;}
if(target < 0) { return ;}
else if(target == 0)
{
if(currentSelectedNums.size() == k) {result.push_back(currentSelectedNums);}
return;
}
for(int i = startPos; i <= 9 && i <= target; ++i)
{
// try to add current number to currentSelectedNums
currentSelectedNums.push_back(i);
selectNum(k, currentSelectedNums, target - i, result, i+1);
// try next num
currentSelectedNums.pop_back();
}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode