当前位置: 首页 > ds >正文

leetcode 39. Combination Sum和40. Combination Sum II

目录

39. Combination Sum

40. Combination Sum II

不使用used数组去重:

使用used数组去重:


39. Combination Sum

class Solution {vector<vector<int>> res;vector<int> com;int sum = 0;
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {backtracking(0,candidates,target);return res;}void backtracking(int start,vector<int>& candidates, int target){if(sum >= target){if(sum == target)res.push_back(com);return;}for(int i = start;i < candidates.size();i++){if(sum + candidates[i] > target)continue;com.push_back(candidates[i]);sum += candidates[i];backtracking(i,candidates,target);//candidates[i]可以重复使用,所以这里的start要传入icom.pop_back();sum -= candidates[i];}}
};

40. Combination Sum II

本题关键是去重。

不使用used数组去重:

去重条件是

 if(i > start && candidates[i] == candidates[i-1])//本题的关键,树层去重continue;
class Solution {vector<vector<int>> res;vector<int> com;int sum = 0;
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {sort(candidates.begin(),candidates.end());//后面去重是需要先对candidates排序backtracking(candidates,target,0);return res;}void backtracking(vector<int>& candidates,int target,int start){if(sum >= target){if(sum == target)res.push_back(com);return;}for(int i = start;i < candidates.size();i++){if(i > start && candidates[i] == candidates[i-1])//本题的关键,树层去重continue;if(sum + candidates[i] > target)continue;com.push_back(candidates[i]);sum += candidates[i];backtracking(candidates,target,i+1);com.pop_back();sum -= candidates[i];}}
};

使用used数组去重:

去重条件是:

            if(i > 0 && candidates[i] == candidates[i-1] && used[i-1] == false)//本题的关键,树层去重continue;

class Solution {vector<vector<int>> res;vector<int> com;int sum = 0;vector<bool> used;
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {sort(candidates.begin(),candidates.end());//后面去重是需要先对candidates排序used.resize(candidates.size(),false);backtracking(candidates,target,0);return res;}void backtracking(vector<int>& candidates,int target,int start){if(sum >= target){if(sum == target)res.push_back(com);return;}for(int i = start;i < candidates.size();i++){// used[i - 1] == true,说明同一树枝candidates[i - 1]使用过// used[i - 1] == false,说明同一树层candidates[i - 1]使用过// 要对同一树层使用过的元素进行跳过if(i > 0 && candidates[i] == candidates[i-1] && used[i-1] == false)//本题的关键,树层去重continue;if(sum + candidates[i] > target)continue;com.push_back(candidates[i]);sum += candidates[i];used[i] = true;backtracking(candidates,target,i+1);com.pop_back();sum -= candidates[i];used[i] = false;}}
};
http://www.xdnf.cn/news/8858.html

相关文章:

  • 容器化:用于机器学习的 Docker 和 Kubernetes
  • 正则表达式全解:一文学会正则表达式【附在线正则表达式练习网站】
  • Android事件分发学习总结
  • SpringBoot-配置文件
  • MLA:Transformer的智能变形金刚——解密多头潜在注意力的进化密码
  • Linux `|` 管道操作符深度解析与高阶应用指南
  • Leetcode 刷题记录 11 —— 二叉树第二弹
  • BTC官网关注巨鲸12亿美元平仓,XBIT去中心化交易平台表现稳定
  • 深入理解设计模式之建造者模式
  • 数组染色
  • RabbitMQ 断网自动重连失效
  • 3d世界坐标系转屏幕坐标系
  • 解锁未来AI:使用DACA模式和Agentic技术提高开发效率
  • TCP 的四次挥手
  • AI重塑数据治理的底层逻辑
  • Java求职者面试指南:Spring、Spring Boot、MyBatis技术栈深度解析
  • Windows逆向工程提升之异常处理机制
  • docker 镜像完整生成指南
  • ResponseBodyEmitter与SseEmitter使用
  • MyBatis实战指南(二)如何实现小鸟图标与导入Teacher数据库表实战
  • 《深入剖析:Python自动化测试框架之unittest与pytest》
  • 微服务——网关
  • TypeScript
  • OpenCV 第7课 图像处理之平滑(一)
  • Flink流水线集成Gravitino
  • 微软Build 2025五大AI发布
  • 人工智能数学基础实验(五):牛顿优化法-电动汽车充电站选址优化
  • 基于微信小程序的漫展系统的设计与实现
  • 研报精读:数据要素市场培育及企业数据资源会计处理实证研究【附全文阅读】
  • 基于opencv的全景图像拼接