代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

216.组合总和III

题目

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。
示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]

示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]

解题思路

  • 和昨天的题目解题思路类似,也就是比leetcode题目77.组合多了一个限制,获取的数字的和为目标值。并且数组的个数不在限制为2个,而是目标个。

在这里插入图片描述

  • 这里需要额外注意的一点是,对于和已经大于targetSum的结果,可以直接返回,也即 剪枝 操作

代码

class Solution {
private:
    vector<vector<int>> result; // 存放结果集
    vector<int> path; // 符合条件的结果
    // targetSum:目标和,也就是题目中的n。
    // k:题目中要求k个数的集合。
    // 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) {
        result.clear(); // 可以不加
        path.clear();   // 可以不加
        backtracking(n, k, 0, 1);
        return result;
    }
};

17.电话号码的字母组合

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

解题思路

  • 这里可以确定的是,树的宽度是3或者4,因为9代表 wxyz 四个字母,其余都是三个字母
  • 树的深度可以确定为给定字符串的长度。即可通过回溯法来解决n个for循环的问题
    在这里插入图片描述
  • 数字和字母对应可以用数组保存,数组下标对应数字,内容对应字母
const string letterMap[10] = {
    "", // 0
    "", // 1
    "abc", // 2
    "def", // 3
    "ghi", // 4
    "jkl", // 5
    "mno", // 6
    "pqrs", // 7
    "tuv", // 8
    "wxyz", // 9
};

代码

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

品牌如何加强社交属性?媒介盒子支招

人类天然具备社交属性&#xff0c;基于这种社交属性&#xff0c;会形成人与人之间的连接性&#xff0c;而社交网络的出现加剧了社交属性的爆发。社交增长营销&#xff0c;就是以大众用户天然的社交属性为核心&#xff0c;让品牌更具话题&#xff0c;实现可持续增长。那么品牌如…

SpringCloud详解,图文码笔记

注意&#xff1a; SpringCloud并 不等于 微服务 1.微服务技术线 2.认识微服务 分布式架构 分布式架构: 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&#xff0c;称为一个服务。 优点&#xff1a; 降低服务耦合有利于服务升级拓展 服务治理 分布式…

java方法的引用传递和值传递

1、方法的值参数传递 下面代码&#xff0c;它会在控制台输出什么&#xff1f; public class ArrayTest {public static void main(String[] args) {int number 100;System.out.println(number);change(number);System.out.println(number);}public static void change(int n…

C#开发中方法使用的问题注意

C#开发中&#xff0c;我们在进行方法内嵌时&#xff0c;需要注意方法回传带值时&#xff0c;我们需要对方法回传的值进行一个赋值传递 如下所示 console.WriteLine("请输入你的爱好&#xff1a;"); string aihao Console.ReadLine(); name ChangeData(name);同时在…

element el-cascader获取完整数据

<el-table-column prop"createTime" label"编辑店铺分类"><template slot-scope"scope"><el-cascaderref"cascader"v-model"scope.row.shoptypeone":options"commoditylist"placeholder"请选…

软件工程- 第4章 结构化分析方法

4.1 基本术语 4.2 模型表示 上述场景&#xff1a;旅行社帮旅客订机票&#xff0c;交付给旅客机票和帐单。 旅行社基于旅客的订票单和航空公司的航班目录预定机票&#xff0c;确定航班准备机票&#xff0c;订票成功&#xff0c;机票数据流向客户。费用记账&#xff0c;生成记账…

深入探索C与C++的混合编程

实现混合编程的技术细节 混合使用C和C可能由多种原因驱动。一方面&#xff0c;现有的大量优秀C语言库为特定任务提供了高效的解决方案&#xff0c;将这些库直接应用于C项目中可以节省大量的开发时间和成本。另一方面&#xff0c;C的高级特性如类、模板和异常处理等&#xff0c;…

CSS 零基础入门教程

目录 1. div 和 span2. 什么是CSS&#xff1f;3. CSS 引入方式3.1 内部样式表3.2 外部样式表3.3 行内样式 4. 选择器4.1 标签选择器4.2 类选择器4.3 id 选择器4.4 通配符选择器 5. CSS 基础属性6. 谷歌浏览器调试工具 正文开始。 1. div 和 span 在学习 CSS 之前&#xff0c;…

好玩的仿真过节烟花模拟器程序

好玩的仿真过节烟花模拟器程序&#xff0c;页面上自动放烟花&#xff0c;可以开启喇叭&#xff0c;也可以点击左上角的设置 下载地址 好玩的仿真过节烟花模拟器程序

mfc140u.dll丢失的解决方法,解决mfc140u.dll问题,让程序运行畅通无阻

如果你的电脑丢失了mfc140u.dll文件&#xff0c;那么可能是电脑中的mfc140u.dll文件发成了变化&#xff0c;倒是点找不到mfc140u.dll文件&#xff0c;并运行mfc140u.dll&#xff0c;那么有什么办法可以解mfc140u.dll丢失的问题呢&#xff1f;接了下来就带大脚先了解一下mfc140u…

MySQL学习笔记(一)

1、什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f; 数据库&#xff1a;英文单词DataBase&#xff0c;简称DB。按照一定格式存储数据的一些文件的组合。顾名思义&#xff0c;存储数据的仓库&#xff0c;实际…

牛客题霸-SQL入门篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 以下内容是牛客题霸-SQL入门篇剩余的第 21-39 道题目的 SQL 代码答案。 由于涉及到的数据库表较多&#xff0c;因…

网络分层架构(七/四层协议)详解

OSI七层模型和TCP/IP四层模型 业内普遍的分层方式有两种&#xff1a;OSI七层模型 和TCP/IP四层模型。记忆则为 “应表会传网数物” 关于协议&#xff1a; ① OSI七层模型详解 结构名 功能 主要设备 应用层 是最靠近用户的OSI层。用户接口、应用程序。应用层向应用进程展示…

【超图】SuperMap如何使知识图谱与BIM数据的绑定

作者&#xff1a;taco 近两年知识图谱的概念突然大火了起来&#xff0c;随之而来的就是用户的各种需求&#xff0c;你们的知识图谱能干什么呢&#xff1f;知识图谱有哪些应用呢&#xff1f;在结合客户的一些需求&#xff0c;以及自身的一些想法&#xff0c;写下这篇文章。 一、…

【涨薪技术】0到1学会性能测试 —— 参数化关联

前言 上一次推文我们分享了性能测试工作原理、事务、检查点&#xff01;今天给大家带来性能测试参数化&#xff0c;检查点知识&#xff01;后续文章都会系统分享干货&#xff0c;带大家从0到1学会性能测试&#xff0c;另外还有教程等同步资料&#xff0c;文末免费获取~ 01、性…

类和对象-1

文章目录 面向过程和面向对象的概念类的引入访问限定符类的大小this指针 面向过程和面向对象的概念 面向过程是一种按照步骤顺序执行的编程方式&#xff0c;而面向对象则是以对象为中心&#xff0c;将数据和操作封装在一起。在面向对象编程中&#xff0c;可以通过定义类和对象来…

stm32-模拟数字转化器ADC

接线图&#xff1a; #include "stm32f10x.h" // Device header//1: 开启RCC时钟&#xff0c;包括ADC和GPIO的时钟//2&#xff1a;配置GPIO将GPIO配置为模拟输入模式//3&#xff1a;配置多路开关将左边的通道接入到规则组中//4&#xff1a;配置ADC转…

zookeeper安装配置

zookeeper是什么 ZooKeeper是一个分布式的&#xff0c; 开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是 ​​​​​​​Hadoop和Hbase的重要组件。它是一个为​​​​​​​分布式应用提供一致性服务的软件&#xff0c;提供的功能…

redis学习-Set集合类型相关命令及特殊情况分析

目录 1. sadd key value1 value2 ... 2. smembers key 3. sismember key value 4. scard key 5. srem key value1 value2 ... 6. srandmember key num 7. spop key num 8. smove key1 key2 value 9. sdiff key1 key2 key3 ... 10. sinter key1 key2 ... 11. sunion key1 key2 .…

mybatis缓存(学习笔记17)

1、什么是缓存&#xff1a;存在内存中的临时数据 将用户经常查询的数据放在缓存&#xff08;内存&#xff09;中&#xff0c;用户去查询数据就不用从磁盘&#xff08;关系数据库数据文件&#xff09;查询&#xff0c;从缓存中查询&#xff0c;从而提高查询效率&#xff0c;解决…