新网站秒收录技术,微信小程序哪里找,毕节做网站优化,如何仿制手机版网站文章目录 题目描述法一 回溯 题目描述 法一 回溯 class Solution{
public:vectorpairint, intfreq;vectorvectorint res;vectorint seq;void dfs(int pos, int rest){//如果目标值为0#xff0c;说明可能有一个组合或者rest本身为0 … 文章目录 题目描述法一 回溯 题目描述 法一 回溯 class Solution{
public:vectorpairint, intfreq;vectorvectorint res;vectorint seq;void dfs(int pos, int rest){//如果目标值为0说明可能有一个组合或者rest本身为0 压入二维数组 if(rest0){res.push_back(seq);return;}//如果到末尾了或者第一个数值就比目标值大直接返回if(posfreq.size() || restfreq[pos].first){return;}dfs(pos1, rest);int most min(rest / freq[pos].first, freq[pos].second);for(int i1;imost;i){ //注意这从1开始 因为后边有乘法 seq.push_back(freq[pos].first);//试探每一值开始有没有可能构成targetdfs(pos1, rest-i*freq[pos].first);}for(int i0;imost;i){seq.pop_back(); //清空seq }}vectorvectorint combinationSum2(vectorint candidates, int target){sort(candidates.begin(), candidates.end());for(auto num:candidates){if(freq.empty() || num!freq.back().first){freq.emplace_back(num, 1); //其中1用来指定 num 对应的值的初始数量 } else {freq.back().second;}}dfs(0, target);return res;}
};