LeetCode刷题之回溯算法组合总和问题
作者:互联网
回溯算法之组合总和问题
求解在一个数组中,找出所有满足数字和为目标数的组合
1.同一个数组,组合可存在重复数字,组合也能重复
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums,int target, int sums, int startindex)
{
if(sums>target) return;
if(sums == target)
{
result.push_back(path);
return;
}
for(int i=startindex;i<nums.size()&&sums+nums[i]<=target;i++)
{
path.push_back(nums[i]);
sums+=nums[i];
backtracking(nums,target,sums,i+1);
sums-=nums[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
result.clear();
path.clear();
sort(candidates.begin(),candidates.end());
backtracking(candidates,target,0,0);
return result;}
};
2.同一个数组,组合可存在重复数字,不能存在重复组合
//方法一
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums,int target, int sums, int startindex)
{
if(sums>target) return;
if(sums == target)
{
result.push_back(path);
return;
}
for(int i=startindex;i<nums.size()&&sums+nums[i]<=target;i++)
{
if(i-1>=startindex && nums[i]==nums[i-1])
{continue;}
path.push_back(nums[i]);
sums+=nums[i];
backtracking(nums,target,sums,i+1);
sums-=nums[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
result.clear();
path.clear();
sort(candidates.begin(),candidates.end());
backtracking(candidates,target,0,0);
return result;}
};
//方法二
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums,int target, int sums, int startindex,vector<bool>&used)
{
if(sums>target) return;
if(sums == target)
{
result.push_back(path);
return;
}
for(int i=startindex;i<nums.size()&&sums+nums[i]<=target;i++)
{
if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false)
{continue;}
used[i]=true;
path.push_back(nums[i]);
sums+=nums[i];
backtracking(nums,target,sums,i+1,used);
used[i]=false;
sums-=nums[i];
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
vector<bool> used(candidates.size(),false);
result.clear();
path.clear();
sort(candidates.begin(),candidates.end());
backtracking(candidates,target,0,0,used);
return result;
}
};
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back 此页面的语言为中文(简体) 翻译为
- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语
标签:target,nums,int,sums,vector,回溯,path,LeetCode,刷题 来源: https://www.cnblogs.com/haipengwu/p/16103023.html