leetcode c++ get combination sum

this problem is a little hard.

we can use the dfs to solve this problem.

when you push_back a num and if the sum is still not enough we can push another 

if it overflow we just return.1

其实中间的那段代码可以这么理解,无论对于什么情况,我们都要把当前的放进去然后继续跑这个函数,实在不行就放下一个!也就是那个for循环。我们要尽量把每一个都放进去试一试。对,大概就是这样吧。

class Solution {
public:
    void getCombineSum(
                   int &sum,
                   int level,
                   int target,
                   vector<int> &solution,
                   vector<int> &candidates,
                   vector<vector<int>> &result
                   ){
      if(sum > target)
        return ;
      if(sum == target)
        result.push_back(solution);
      if(sum < target)
      {
          for(int i = level;i<candidates.size();i++)
          {
            sum += candidates[i];
            solution.push_back(candidates[i]);
            getCombineSum(sum,i,target,solution,candidates,result);
            solution.pop_back();
            sum -= candidates[i];
          }

      }
    

}
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
    vector<int> solution;
    vector<vector<int>> result;
    int sum = 0;
    sort(candidates.begin(),candidates.end());
    getCombineSum(sum,0,target,solution,candidates,result);
    return result;
}
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值