代码随想录算法训练营第23期day25| 216.组合总和III 、17.电话号码的字母组合

news2025/1/16 0:50:54

目录

一、(leetcode 216)组合总和III

剪枝

二、(leetcode 17)电话号码的字母组合

思路


一、(leetcode 216)组合总和III

力扣题目链接

状态:已AC,就是在77题的前提下,多加了一个限制,需要和为定值

  • 确定递归函数参数
  • 确定终止条件
  • 单层搜索逻辑
class Solution {
private:
    vector<vector<int>> result; // 存放结果集
    vector<int> path; // 符合条件的结果
    // sum:已经收集的元素的总和,也就是path里元素的总和。
    // startIndex:下一层for循环搜索的起始位置。
    void backtracking(int targetSum, int k, int sum, int startIndex) {
        if (path.size() == k) {
            if (sum == targetSum) result.push_back(path);
            return; // 如果path.size() == k 但sum != targetSum 直接返回
        }
        for (int i = startIndex; i <= 9; i++) {
            sum += i;
            path.push_back(i); 
            backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndex
            sum -= i; // 回溯
            path.pop_back(); 
        }
    }

public:
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(n, k, 0, 1);
        return result;
    }
};

剪枝

剪枝的地方可以放在递归函数开始的地方

if (sum > targetSum) { // 剪枝操作
    return;
}

也可以放在调用递归之前,要记得要回溯操作给做了。

for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝
    sum += i; // 处理
    path.push_back(i); // 处理
    if (sum > targetSum) { // 剪枝操作
        sum -= i; // 剪枝之前先把回溯做了
        path.pop_back(); // 剪枝之前先把回溯做了
        return;
    }
    backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndex
    sum -= i; // 回溯
    path.pop_back(); // 回溯
}

二、(leetcode 17)电话号码的字母组合

力扣题目链接

状态:查看思路后AC,没有想到如果出现输入1 * #按键等等异常情况怎么办

思路

  1. 数字和字母如何映射
  2. 两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来
  3. 输入1 * #按键等等异常情况
class Solution {
private:
    const string letterMap[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };
public:
    vector<string> result;
    string s;
    void backtracking(const string& digits, int index) {
        if (index == digits.size()) {
            result.push_back(s);
            return;
        }
        int digit = digits[index] - '0';        // 将index指向的数字转为int
        string letters = letterMap[digit];      // 取数字对应的字符集
        for (int i = 0; i < letters.size(); i++) {
            s.push_back(letters[i]);            // 处理
            backtracking(digits, index + 1);    // 递归,注意index+1,一下层要处理下一个数字了
            s.pop_back();                       // 回溯
        }
    }
    vector<string> letterCombinations(string digits) {
        s.clear();
        result.clear();
        if (digits.size() == 0) {
            return result;
        }
        backtracking(digits, 0);
        return result;
    }
};

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

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

相关文章

【23真题】130分送分!剩下20谁也别拿满!

今天分享的是23年武汉工程大学834的信号与系统试题及解析。 填空涉及到概念题&#xff0c;和简答题&#xff01;这种题型非常少见&#xff01;很像我们的梦马全程班6月模考&#xff0c;也考了简答概念&#xff0c;但是我们只是为了帮助大家理解知识点&#xff0c;他玩真的&…

使用流量管理工具保护 Kubernetes 的六种方法

原文作者&#xff1a;Jenn Gile - F5 NGINX 产品营销经理 原文链接&#xff1a;使用流量管理工具保护 Kubernetes 的六种方法 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c;尽在 nginx.org.cn 编者按 —— 本文是以下系列博文中的一篇&#xff08;共…

云服务器快速搭建网站

目录 安装Apache Docker 安装 Mysql 安装 Docker 依赖包 添加 Docker 官方仓库 安装 Docker 引擎 启动 Docker 服务并设置开机自启 验证 Docker 是否成功安装 拉取 MySQL 镜像 查看本地镜像 运行容器 停止和启动容器 列出正在运行的容器 安装PHP环境 搭建网站 安装…

前端刷新token,判断token是否过期(jwt鉴权)

4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案&#xff1b; 就是登录成功后将相关用户信息组成 JSON 对象&#xff0c;然后对这个对象进行某种方式的加密&#xff0c;返回给客户端&#xff1b; 客户端在下次请求时带上这个 Token&#xff…

Python网络编程改良版服务端

在《Python中套接字实现服务端和客户端3-1》中提到服务端可以接收来自客户端的连接&#xff0c;并且创造新的套接字与客户端进行数据通信。此时的服务端只能与一个客户端进行数据通信&#xff0c;如果有多个客户端连接服务端&#xff0c;该怎么对服务端进行改良呢&#xff1f; …

全流程TOUGH系列软件应用丨入门丨基础丨进阶丨实操

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

100.一个linux内核选项对ssh的影响

&#xff08;从这开始给文章编号&#xff0c;编号从100开始&#xff09; 平台&#xff1a;rk3399&#xff08;f4932-r2h&#xff09; 内核&#xff1a;linux5.10 文件系统&#xff1a;firefly ssh&#xff1a;有线网卡 串口终端打印正常&#xff0c; 但是ssh登录却出现如下…

Xshell7试用期过了,打开就显示评估期已过,想继续或者不能删除怎么办?详细说明解决步骤

文章目录 1、问题说明2、解决办法2.1 重新安装2.2 卸载 1、问题说明 多长时间没用 Xshell 远程连接服务器&#xff0c;发现之前没有使用魔法工具处理&#xff08;正版&#xff09;&#xff0c;现在过期了。 2、解决办法 想继续使用Xshell的话&#xff0c;有两种方式&#xff…

全光谱台灯对孩子眼睛好吗?2023五款全光谱护眼台灯推荐

全光谱台灯是一种能够模拟自然光谱的照明设备&#xff0c;其光线成分丰富&#xff0c;更接近自然阳光的光谱。相比传统的白炽灯或荧光灯&#xff0c;全光谱台灯在照明效果上更加均匀柔和&#xff0c;并且可以提供更好的颜色还原效果。对于孩子的眼睛来说&#xff0c;全光谱台灯…

ios UI 基础开发二

第一节&#xff1a;UIPickerView、UIPickerViewDataSource、UIPickerViewDelegate 设置约束&#xff0c;如果要设置两个兄弟的约束&#xff0c;可以按住option键&#xff0c;用鼠标右键把a拖到b上面&#xff0c;表示a按照b来对齐 生成随机数 如果后面列的数据&#xff0c;依赖前…

JL-03多场合通用型小型气象站

JL-03小型气象站&#xff0c;用于对风速、风向、雨量、空气温度、空气湿度、太阳辐射、光照强度、土壤温度、土壤湿度、蒸发量、大气压力等气象要素进行监测。既可以通过无线通讯将数据传送至云平台&#xff0c;又可以通过配套的数据采集通讯线与计算机进行连接&#xff0c;将数…

ARP协议

ARP协议 文章目录 ARP协议ARP协议的作用ARP协议的定位ARP数据报的格式ARP协议的工作流程ARP缓存表RARP协议 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 ARP协议的作用 ARP协议…

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过一个高效而灵活的框架来进行数据抓取&#xff0c;那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架&#xff0c;专门用于构建网络爬虫。今天&#xff0c;我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

2023最令人心动的短视频配音软件

配音在影视、广告和动画等领域中起着非常重要的作用&#xff0c;可以为作品增添情感和戏剧性。然而&#xff0c;许多人不知道如何制作配音&#xff0c;如果你也是这样&#xff0c;一定要花一分钟看完这篇文章。 其实现在有一些AI智能配音软件就很好用&#xff0c;可以帮助我们…

Windows安装SNMP服务

windows10安装SNMP服务 打开计算机的设置–应用–应用和功能–可选功能–点击加号添加功能,添加以下两个功能: windows server安装SNMP服务 搜索打开服务器管理器,点击功能–添加功能,勾选SNMP服务,点击下一步,等待安装完成 按win+R快捷键,运行service.msc,在服务中将…

电脑D盘文件凭空消失了?切记3招,轻松恢复文件!

“由于我c盘内存不够了&#xff0c;我就将部分重要的文件保存到了d盘&#xff0c;今天打开d盘后才发现我这些文件凭空消失了。这究竟是什么呀&#xff1f;还有机会找回这些消失的d盘文件吗&#xff1f;” D盘作为电脑中一个重要的磁盘&#xff0c;很多电脑用户也会选择将文件保…

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线&#xff08;RS485&#xff09;和以太网的数据中枢&#xff0c;并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能&#xff0c;可实现多维度映射&#xff0c;包括&#xff1a;不同的通道(总线)类型、协议类型&#xff…

QSpace Pro 4.0.4.001(多面板文件管理器)

QSpace是一个干净高效的多面板文件管理器&#xff0c;也可以连接到FTP&#xff0c;SFTP&#xff0c;WebDAV&#xff0c;Dropbox&#xff0c;OneDrive&#xff0c;GoogleDrive&#xff0c;Amazon S3&#xff08;和S3兼容&#xff09;&#xff0c;Aliyun OSS。它具有与Finder相同…

调优C / C ++编译器以在多核应用程序中获得最佳并行性能:第一部分

领取嵌入式物联网学习路线对于希望通过多核设计中的多线程或分区利用并行性的而言&#xff0c;重要的第一步是提高应用程序的标量性能。 更好&#xff0c;更轻松的方法之一是应用积极的编译器优化。面向您的处理器并具有高级优化功能&#xff08;例如自动矢量化&#xff0c;过…

多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09; 目录 多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基本…