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

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;}}
};

相关文章:

  • 人工智能100问☞第32问:什么是迁移学习?
  • 机器学习课程设计报告 —— 基于口红数据集的情感分析
  • 【免杀】C2免杀技术(九)DLL注入前置篇
  • 事务操作语句
  • 美团2025年校招笔试真题手撕教程(三)
  • [Linux]磁盘分区及swap交换空间
  • React整合【ECharts】教程002:折线图的构建和基本设置
  • 疫情社区管理登记系统
  • 基于TypeScript的全栈待办事项应用Demo
  • binlog解析工具——binlog2sql
  • 机械师安装ubantu双系统:二、磁盘分区
  • 【MPC控制 - 从ACC到自动驾驶】5. 融会贯通:MPC在ACC中的优势总结与知识体系构建
  • 浏览器游戏的次世代革命:WebAssembly 3.0 实战指南
  • 人脑能够通过视频信息快速建模出现实场景,原因有哪些方面?
  • 人工智能数学基础实验(一):智能推荐系统实战
  • CA自签名证书创建--证书链生成脚本
  • 强化学习在大模型中的应用详解
  • 分几个好用的系统提示词
  • FreeRTOS--信号量
  • EPD_2IN7_V2_Clear() 和 Paint_Clear(WHITE) 的区别
  • H5酒店静态网站建设开题报告范文/sem账户托管
  • 营销型企业网站类型/网络推广运营外包公司
  • wordpress文章标题前显示置顶/台州seo公司
  • 做网站推广广告/长春seo排名优化
  • 山东网站开发/免费数据查询网站
  • 做网站 嵌入支付/网站收录查询站长工具