193.回溯算法:组合总和(力扣)

news2024/10/6 12:22:36

代码解决

class Solution {
public:
    vector<int> res; // 当前组合的临时存储
    vector<vector<int>> result; // 存储所有符合条件的组合
    
    // 回溯函数
    void backtrcing(vector<int>& nums, int target, int flag, int index) {
        // 如果当前组合的和超过了目标值,则返回
        if (flag > target) return;
        
        // 如果当前组合的和等于目标值,则将当前组合加入结果集
        if (flag == target) {
            result.push_back(res);
            return;
        }
        
        // 遍历候选数组
        for (int i = index; i < nums.size(); i++) {
            flag += nums[i]; // 将当前元素加入组合和
            res.push_back(nums[i]); // 将当前元素加入当前组合
            backtrcing(nums, target, flag, i); // 递归调用回溯函数,允许重复使用当前元素
            flag -= nums[i]; // 回溯,移除当前元素
            res.pop_back(); // 回溯,移除当前元素
        }
    }
    
    // 主函数
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        backtrcing(candidates, target, 0, 0); // 初始调用回溯函数
        return result; // 返回所有符合条件的组合
    }
};

测试用例

输入

vector<int> candidates = {2, 3, 6, 7}; int target = 7;

输出

[ [2, 2, 3], [7] ]

过程描述

  1. 初始状态

    • candidates = {2, 3, 6, 7}
    • target = 7
    • res = [](当前组合为空)
    • result = [](所有符合条件的组合为空)
  2. 递归回溯

    • 从第一个元素 2 开始:
      • flag = 2res = [2],继续递归。
      • 再次选择 2
        • flag = 4res = [2, 2],继续递归。
        • 再次选择 2
          • flag = 6res = [2, 2, 2],继续递归。
          • 再次选择 2
            • flag = 8,超过目标值,回溯,移除最后一个 2
        • 尝试选择 3
          • flag = 7res = [2, 2, 3],符合目标值,将组合加入 result,回溯,移除最后一个 3
        • 尝试选择 67
          • 超过目标值,回溯。
      • 尝试选择 3
        • flag = 5res = [2, 3],继续递归。
        • 再次选择 3
          • 超过目标值,回溯。
        • 尝试选择 67
          • 超过目标值,回溯。
    • 尝试选择 3
      • flag = 3res = [3],继续递归。
      • 再次选择 3
        • flag = 6res = [3, 3],继续递归。
        • 尝试选择 367
          • 超过目标值,回溯。
    • 尝试选择 6
      • flag = 6res = [6],继续递归。
      • 尝试选择 67
        • 超过目标值,回溯。
    • 尝试选择 7
      • flag = 7res = [7],符合目标值,将组合加入 result

最终,result 包含所有符合条件的组合 [[2, 2, 3], [7]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1855173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何下载油管视频

文章目录 1、IDM下载1.1 安装IDM工具1.2 浏览器安装IDM插件 2、命令行工具下载2.1 youtube-dl工具2.1.1 安装使用2.1.2 更新工具 2.2 yt-dlp 工具2.2.1 安装使用2.2.2 保存路径查看当前工作目录指定下载目录示例 2.2.3 保存文件名2.2.4 避坑指南1、请求被拒绝2、其他问题 在全球…

如何打包数据库文件

使用 mysqldump 命令&#xff1a; mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名&#xff0c;可以自定义。 示例&#xff1a; mysqldump -u root -p…

Ubuntu/Linux SSH 端口转发

文章目录 Ubuntu/Linux SSH 端口转发概述本地端口转发场景一场景二 参考资料 Ubuntu/Linux SSH 端口转发 概述 SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外&#xff0c;ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功…

[spring] Spring MVC Thymeleaf(下)

[spring] Spring MVC & Thymeleaf&#xff08;下&#xff09; 上篇笔记讲了一下怎么使用 thymeleaf 作为 HTML 模板&#xff0c;与 Spring MVC 进行沟通&#xff0c;这里主要说一下验证的部分 常用表单验证 一些 Spring MVC 内置的常用验证注解如下&#xff1a; Annota…

【深度学习】智能手写数字识别系统

文章目录 一&#xff0e;实验课题背景说明1.1实验目的1.2实验环境1.2.1安装PyTorch1.2.2安装其他必要的库 二&#xff0e;模型说明2.1模型概述2.2模型结构 三&#xff0e;数据说明3.1 输入数据3.1.1输入数据特征3.1.2输入数据维度3.1.3输入数据预处理 3.2 数据格式3.2.1输出数据…

两个方法,批量替换PPT中的字体

经常制作ppt的朋友可能会遇到需要批量替换字体的情况&#xff0c;如果我们想要更换ppt中的字体&#xff0c;今天分享PPT批量替换字体的两个方法。 方法一&#xff1a; 找到功能栏中的编辑选项卡&#xff0c;点击替换 – 替换字体&#xff0c;在里面选择我们想要替换的字体就可…

【因果推断python】51_去偏/正交机器学习3

目录 What is Non-Parametric About? What is Non-Parametric About? 在我们继续之前&#xff0c;我只想强调一个常见的误解。当我们考虑使用非参数 Double-ML 模型来估计 CATE 时&#xff0c;我们似乎会得到一个非线性治疗效果。例如&#xff0c;让我们假设一个非常简单的数…

LeetCode665.非递减数列

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码 &#x1f4dc;题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;请你判断在 最多 改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&am…

昆明理工大学24计算机考研各专业复试线大幅下降,B区国家线即可复试!

昆明理工大学&#xff08;Kunming University of Science and Technology&#xff09;&#xff0c;位于云南省昆明市&#xff0c;是云南省综合性重点大学&#xff0c;由国防科技工业局与云南省人民政府共建高校&#xff0c;入选“中西部高校基础能力建设工程”、国家建设高水平…

第10关:视图1 、第11关:视图2 、第12关:用户。

目录 第10关&#xff1a;视图1 任务描述 知识补充 答案 第11关&#xff1a;视图2 任务描述 知识补充 答案 第12关&#xff1a;用户 任务描述 知识补充 答案 本篇博客声明&#xff1a;所有题的答案不在一起&#xff0c;可以去作者博客专栏寻找其它文章。 第10关&…

Phi-3 模型手机部署教程(微软发布的可与GPT-3.5媲美的小模型)

前面几篇博文&#xff0c;老牛同学和大家一起在个人电脑部署了Qwen2、GLM4、Llama3、ChatTTS和Stable Diffusion等 LLM 大模型&#xff0c;也通过 API 和 WebUI 的方式完成了体验。 但是这些大模型因为部署在个人电脑本地&#xff0c;不能够随时携带。如果能在手机上部署大模型…

EtherCAT笔记(三) —— 主站与从站的硬件组成

1. EtherCAT 主站的硬件组成 EtherCAT主站使用标准以太网控制器&#xff0c;也即EtherCAT主站可以使用以太网控制器的任何设备。当我们有一台带网口的笔记本、工控机&#xff0c;甚至是树莓派也可以作为EtherCAT主站。 EtherCAT协议是对Ethernet协议在实时控制等方面的优化&am…

一篇文章带你快速入门java

文章目录 一、一个简单的java代码1.1 Java程序的结构由三个不成组成&#xff1a;1.2 运行java程序1.3 JDK,JRE,JVM之间的关系&#xff1f;(面试题)1.4 标识符1.5 注释1.6 关键字 一、一个简单的java代码 public class HelloJava {public static void main(String[] args) {Sys…

【建议收藏】Android中高级大厂面试源码秘籍,为你备战2021金三银四,直通大厂

首先来说下为什么要读源码&#xff0c;有学习源码的必要吗&#xff1f; 为什么要阅读源码&#xff1f; 关于为什么阅读和学习源码&#xff0c;我个人认为可能有以下几点&#xff1a; &#xff08;一&#xff09;吊打面试官&#xff0c;应对面试 为了找到更好的工作&#xff…

Linux配置中文环境

文章目录 前言中文语言包中文输入法中文字体 前言 在Linux系统中修改为中文环境&#xff0c;通常涉及以下几个步骤&#xff1a; 中文语言包 更新源列表&#xff1a; 更新系统的软件源列表和语言环境设置&#xff0c;确保可以安装所需的语言包。 sudo apt update sudo apt ins…

Python+Pytest+Yaml+Request+Allure框架源代码之(一)common公共方法封装

common模块&#xff1a; get_path.py&#xff1a;获取路径方法 # -*- coding: UTF-8 -*- import os# 项目根目录 BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 配置文件目录 CONFIG_DIR os.path.join(BASE_DIR,config)# 测试用例文件目录 TESTCA…

康奈尔大学之论文审稿模型Reviewer2及我司七月对其的实现(含PeerRead)

前言 自从我司于23年7月开始涉足论文审稿领域之后「截止到24年6月份&#xff0c;我司的七月论文审稿GPT已经迭代到了第五版&#xff0c;详见此文的8.1 七月论文审稿GPT(从第1版到第5版)」&#xff0c;在业界的影响力越来越大&#xff0c;所以身边朋友如发现业界有相似的工作&a…

年薪50w+的项目经理,手把手教你如何复盘

复盘是一种重要的学习和改进工具&#xff0c;对于项目经理来说&#xff0c;能帮助识别项目中的成功与失败&#xff0c;为未来的项目管理提供宝贵经验。 理论部分 定义目标。在开始复盘之前&#xff0c;明确复盘的目标是什么。是为了找出项目中的问题并提出解决方案&#xff0c…

自动驾驶规划中使用 OSQP 进行二次规划 代码原理详细解读

目录 1 问题描述 什么是稀疏矩阵 CSC 形式 QP Path Planning 问题 1. Cost function 1.1 The first term: 1.2 The second term: 1.3 The thrid term: 1.4 The forth term: 对 Qx 矩阵公式的验证 整体 Q 矩阵&#xff08;就是 P 矩阵&#xff0c;二次项的权重矩阵&…

Android开发:自定义TabLayout,神奇效果竟是如此简单

此时有的小伙伴可能会想&#xff0c;自定义view太麻烦&#xff0c;不如让UI直接把这个弧度切出来&#xff0c;不是一共就三个tab项嘛&#xff0c;Textview&#xff0c;ImageView… 这样横着排起来&#xff0c;然后做适当的显示和隐藏不就行啦。 是的&#xff0c;确实是可以&am…