【leetcode】 ——组合总和(39)

组合总和(力扣第39题)

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

所有数字(包括 target)都是正整数。
解集不能包含重复的组合。 

示例 1:

输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]

示例 2:

输入: candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]

来源:力扣(LeetCode)
链接:组合总和

思路:典型的回溯

代码:

class Solution 
{
private:
    vector<vector<int>> vv;
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) 
    {
        vector<int> v;
        sort(candidates.begin(),candidates.end());
        
        dfs(0,candidates,v,target);
        return vv;
    }
    void dfs(int begin,vector<int> candidates,vector<int> v,int target)
    {
            if(target==0)
                vv.push_back(v);
            else
            {
                for(int j=begin;j<candidates.size();j++)
                {
                	if(candidates[j]<=target)
                	{
                    	v.push_back(candidates[j]);
                    	dfs(j,candidates,v,target-candidates[j]);
                    	v.pop_back();
                	}
               	   else
                    	break;
                }
            }   
     }
};

在这里插入图片描述

发布了42 篇原创文章 · 获赞 13 · 访问量 1758

猜你喜欢

转载自blog.csdn.net/Vicky_Cr/article/details/105354861
今日推荐