栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode39.组合总和(中等)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode39.组合总和(中等)




思路:类似多背包问题
难点:不熟悉模板

if (满足条件) {
	更新ans;
	return ;
}
if (index == n - 1 || 不满足条件) return ;
ans.push_back(a[m]);
dfs(m); 
ans.pop_back();
dfs(m+1);

易错点:
dfs(index + 1, sum + candidates[index + 1], ans, each, candidates, target); 第二个参数写错了,不选index的一个了,所以应该是当前层的sum !!!

class Solution {
public:
    void dfs(int index, int sum, vector> &ans, vector &each, vector& candidates, int target);
    vector> combinationSum(vector& candidates, int target) {
        
        //多背包写法
        vector> ans;
        vector each;
        dfs(0, 0, ans, each, candidates, target);
        return ans;
    }
};
void Solution :: dfs(int index, int sum, vector> &ans, vector &each, vector& candidates, int target) {
    if (sum == target) {
        ans.push_back(each);
        return ;
    }
    if (index == candidates.size() || sum > target) return ;
    each.push_back(candidates[index]);
    dfs(index, sum + candidates[index], ans, each, candidates, target);
    each.pop_back();
    //dfs(index + 1, sum + candidates[index + 1], ans, each, candidates, target); 错误
    dfs(index + 1, sum, ans, each, candidates, target);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号