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

216.组合总和III

题目链接:组合总和III

题目描述:找出所有相加之和为 n **的 k ****个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

解题思想:

本题就是在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合。

本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度。

例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。

选取过程如图:
在这里插入图片描述

class Solution {
public:vector<vector<int>> combinationSum3(int k, int n) {int sum = 0;backtracking(k, n, sum, 1);return result;}private:vector<vector<int>> result;vector<int> path;void backtracking(int k, int n, int sum, int startIndex) {if (path.size() == k) {if (sum == n)result.push_back(path);return;}for (int i = startIndex; i <= 9; i++) {path.push_back(i);sum += i;backtracking(k, n, sum, i + 1);path.pop_back();sum -= i;}}
};

剪枝优化:

  • 已选元素总和如果已经大于n了,那么往后遍历就没有意义了,直接剪掉。
  • for循环的范围也可以剪枝,i <= 9 - (k - path.size()) + 1就可以了。k-path.size()为还需要的元素个数,后面的元素个数不足了。
class Solution {
public:vector<vector<int>> combinationSum3(int k, int n) {int sum = 0;backtracking(k, n, sum, 1);return result;}private:vector<vector<int>> result;vector<int> path;void backtracking(int k, int n, int sum, int startIndex) {if (sum > n)return;if (path.size() == k) {if (sum == n)result.push_back(path);return;}for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {path.push_back(i);sum += i;backtracking(k, n, sum, i + 1);path.pop_back();sum -= i;}}
};

17.电话号码的字母组合

题目链接:电话号码的字母组合

题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

!https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/11/09/200px-telephone-keypad2svg.png

解题思想:

理解本题后,要解决如下三个问题:

  1. 数字和字母如何映射
    可以使用map或者定义一个二维数组,例如:string letterMap[10]

  2. 两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来
    例如:输入:“23”,抽象为树形结构,如图所示:

    在这里插入图片描述

    图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。

  3. 输入1 * #按键等等异常情况

class Solution {
public:vector<string> letterCombinations(string digits) {if (!digits.empty())backtracking(digits, 0);return result;}private:string path;vector<string> result;void backtracking(const string& digits, int index) {if (index == digits.size()) {result.push_back(path);return;}string letter = letterMap[digits[index] - '0'];for (int i = 0; i < letter.size(); i++) {path.push_back(letter[i]);backtracking(digits, index + 1);path.pop_back();}}const string letterMap[10] = {"",     // 0"",     // 1"abc",  // 2"def",  // 3"ghi",  // 4"jkl",  // 5"mno",  // 6"pqrs", // 7"tuv",  // 8"wxyz", // 9};
};
  • 时间复杂度: O(3^m * 4^n),其中 m 是对应四个字母的数字个数,n 是对应三个字母的数字个数
  • 空间复杂度: O(3^m * 4^n)

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

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

相关文章

2024热门外贸独立站wordpress模板

工艺品wordpress外贸主题 简约大气的wordpress外贸主题&#xff0c;适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377 日用百货wordpress外贸主题 蓝色大气的wordpress外贸主题&#xff0c;适合做日用百货的外贸公司搭建跨境电商网站使用。 …

Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 QSpinBox组件-窗口背景不透明调节器 2.2 DoubleSpinBox 组件-来调节程序窗口的整体大小 2.3 QTimeEdit、QDateEdit、QDateTimeEdit组件-编辑日期和时间的小部件 Input Widgets部件部件较多&#xff0c;将分为三…

centos上安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

13个外贸业务员常用邮件模板-订单沟通

除了报价后跟进客户&#xff0c;我们在实际工作过程当中也会遇到很多非常规性的情况&#xff0c;需要和客户及时沟通处理。 以下是13个外贸业务员常用邮件模板-订单沟通&#xff1a;你可以根据自己的行业、公司、产品情况以及自身的经验判断进行调整和完善&#xff0c;做出一套…

水下蓝牙耳机哪个牌子好?业界公认四大高口碑游泳耳机

在这个活力四溢的时代&#xff0c;人们对于健康生活方式的追求愈发热切&#xff0c;游泳作为一项兼顾休闲与健身的运动&#xff0c;深受大众喜爱。在水下世界&#xff0c;音乐的陪伴能增添游泳的乐趣&#xff0c;一款好的水下蓝牙耳机成为游泳爱好者们的新宠。 近年来&#xff…

DZY-212中间继电器 DC 220V 板后接线 面板安装 JOSEF约瑟

系列型号: DZY-200系列中间继电器&#xff1b;DZY-201中间继电器&#xff1b; DZY-202中间继电器&#xff1b;DZY-203中间继电器&#xff1b; DZY-204中间继电器&#xff1b;DZY-205中间继电器&#xff1b; DZY-206中间继电器&#xff1b;DZY-207中间继电器&#xff1b; DZY-20…

openEuler 22.03(华为欧拉)一键安装 Oracle 19C(19.22) 数据库

前言 Oracle 一键安装脚本&#xff0c;演示 openEuler 22.03 一键安装 Oracle 19C 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据…

ssh免密登陆更换目标主机后无法连接

在进行hadoop分布式环境搭建时&#xff08;三台机&#xff0c;master&#xff0c;slave1&#xff0c;slave2&#xff09;&#xff0c;后期slave2系统出现问题&#xff0c;更换新机后&#xff0c;master与slave2文件传输失败&#xff1a; 以为是秘钥过期的问题&#xff0c;更换…

走出大模型部署新手村!小明这样用魔搭+函数计算

作者&#xff1a;拓山 前文介绍了魔搭 ModelScope 社区模型服务 SwingDeploy 服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算&#xff0c;当选择模型并部署时&#xff0c;系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源&#xff0c…

c++多长时间会被Python或者其他语言取代?

c多长时间会被Python或者其他语言取代&#xff1f; 如果不考虑市场因素&#xff0c;C#今天就可以取代C。 自.NET跨平台至今&#xff0c;C能做的工作&#xff0c;C#都能做了&#xff0c;且性能差别不大。 在C最有优势的嵌入式UI方面&#xff0c;C#可以拿出Avalonia替代QT。用 …

9.16单词拆分(LC139-M)

算法&#xff1a; 这道题可以用回溯&#xff0c;但是可能会超时 可以用背包问题解决&#xff1a; 物品&#xff1a;单词 背包&#xff1a;字符串&#xff1a; 单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。 拆分时可以重复使用字典中的单词&#xff0c;就…

M4芯片和核心板应用于工业网关解决方案

在工业级应用中&#xff0c;M4芯片和核心板凭借其丰富的接口和强大的性能及高性价比特点&#xff0c;已经成为众多工业设备中的首选。本文将从M4芯片和核心板的特点、应用场景、以及其在工业级网关中的应用等方面进行详细阐述。 一、M4芯片和核心板的特点 M4芯片和核心板以其…

nfs介绍与配置

NFS 1. nfs简介 nfs特点 NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读写位于远端NFS服…

camelot pdf提取表格实践(记录)

参考&#xff1a; 巧用Python的camelot库批量提取PDF发票信息 关于文本pdf的表格抽取 AttributeError: module ‘camelot‘ has no attribute ‘read_pdf‘及类似问题解决办法 camelot 参数 https://blog.csdn.net/INTSIG/article/details/123000010 报错解决&#xff1a; Mod…

美团大规模KV存储挑战与架构实践

KV 存储作为美团一项重要的在线存储服务&#xff0c;承载了在线服务每天万亿级的请求量&#xff0c;并且保持着 99.995% 的服务可用性。在 DataFunSummit 2023 数据基础架构峰会上&#xff0c;我们分享了《美团大规模 KV 存储挑战与架构实践》&#xff0c;本文为演讲内容的整理…

探讨NLP对行业大量数据信息抽取的技术实现

在本文中&#xff0c;为了实现高效的信息抽取&#xff0c;我们采用了一个自主研发的多模态AI的大模型NLP平台。 这个平台的使用过程分为以下几个步骤&#xff1a; 数据收集&#xff1a;我们收集了与项目相关的100条数据样本&#xff0c;这些样本涵盖了各种商品描述&#xff0c…

Go web 基础相关知识

Go web Web工作方式 浏览器本身是一个客户端&#xff0c;当你输入URL的时候&#xff0c;首先浏览器会去请求DNS服务器&#xff0c;通过DNS获取相应的域名对应的IP&#xff0c;然后通过IP地址找到IP对应的服务器后&#xff0c;要求建立TCP连接&#xff0c;等浏览器发送完HTTP …

软考 网工 每日学习打卡 2024/3/18

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论&#xff0c;在此基础上深入理解网络安全协议的工作原理&#xff0c;并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计

相信大家碰到源码时经常无从下手&#x1f643;&#xff0c;不知道从哪开始阅读&#xff0c;面对大量代码晕头转向&#xff0c;索性就读不下去了&#xff0c;又浪费了一次提升自己的机会&#x1f62d;。 我认为有一种方法&#xff0c;可以解决大家的困扰&#xff01;那就是通过阅…