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

LeetCode40. Combination Sum II

文章目录

    • 一、题目
    • 二、题解

一、题目

Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.

Each number in candidates may only be used once in the combination.

Note: The solution set must not contain duplicate combinations.

Example 1:

Input: candidates = [10,1,2,7,6,1,5], target = 8
Output:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
Example 2:

Input: candidates = [2,5,2,1,2], target = 5
Output:
[
[1,2,2],
[5]
]

Constraints:

1 <= candidates.length <= 100
1 <= candidates[i] <= 50
1 <= target <= 30

二、题解

使用used数组进行去重

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtracking(vector<int>& candidates,int target,int sum,int startIndex,vector<int>& used){if(sum > target) return;if(sum == target){res.push_back(path);return;}for(int i = startIndex;i < candidates.size();i++){if(i > 0 && candidates[i-1] == candidates[i] && used[i-1] == 0)continue;sum += candidates[i];used[i] = 1;path.push_back(candidates[i]);backtracking(candidates,target,sum,i+1,used);sum -= candidates[i];used[i] = 0;path.pop_back();}}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {int n = candidates.size();vector<int> used(n,0);sort(candidates.begin(),candidates.end());backtracking(candidates,target,0,0,used);return res;}
};

使用startIndex进行去重

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtracking(vector<int>& candidates,int target,int sum,int startIndex){if(sum > target) return;if(sum == target){res.push_back(path);return;}for(int i = startIndex;i < candidates.size() && candidates[i] + sum <= target;i++){if(i > startIndex && candidates[i-1] == candidates[i])continue;sum += candidates[i];path.push_back(candidates[i]);backtracking(candidates,target,sum,i+1);sum -= candidates[i];path.pop_back();}}vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {int n = candidates.size();sort(candidates.begin(),candidates.end());backtracking(candidates,target,0,0);return res;}
};

相关文章:

  • FlinkCDC实现主数据与各业务系统数据的一致性(瀚高、TIDB)
  • Axure插件浏览器一键安装:轻松享受高效工作!
  • 【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘
  • 源启容器平台KubeGien 打造云原生转型的破浪之舰
  • skywalking中gateway的拓扑图没有出现
  • quickapp_快应用_requestHeader
  • git进阶使用《多账号管理》
  • HarmonyOS ArkTS开发语言介绍(三)
  • IO口电压下降那么多是怎么回事??
  • Pytorch中的tensor维度理解
  • 【SpringBoot篇】Spring_Task定时任务框架
  • opencv使用pyinstaller打包错误:‘can‘t find starting number (in the name of file)
  • YOLOv7独家改进: Inner-IoU基于辅助边框的IoU损失,高效结合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11
  • Navicat 技术指引 | 适用于 GaussDB 的自动运行功能
  • WifiManager的getConnectionInfo被弃用了?快来使用ConnectivityManager获取更全的网络信息吧
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Amaple教程】5. 插件
  • angular学习第一篇-----环境搭建
  • classpath对获取配置文件的影响
  • co模块的前端实现
  • Effective Java 笔记(一)
  • FineReport中如何实现自动滚屏效果
  • Git初体验
  • Java编程基础24——递归练习
  • leetcode-27. Remove Element
  • mysql常用命令汇总
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Redis 中的布隆过滤器
  • session共享问题解决方案
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 闭包,sync使用细节
  • 从零开始的无人驾驶 1
  • 关于for循环的简单归纳
  • 离散点最小(凸)包围边界查找
  • 区块链分支循环
  • 收藏好这篇,别再只说“数据劫持”了
  • 小李飞刀:SQL题目刷起来!
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Linux权限管理(week1_day5)--技术流ken
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 整理一些计算机基础知识!
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​iOS实时查看App运行日志
  • ​香农与信息论三大定律
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (阿里云万网)-域名注册购买实名流程
  • (第27天)Oracle 数据泵转换分区表
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (未解决)macOS matplotlib 中文是方框
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET Core 版本不支持的问题