day25 组合总和Ⅲ 电话号码的字母组合

news2025/1/16 1:04:15

题目1:216 组合总和Ⅲ

题目链接:216 组合总和Ⅲ

题意

找出相加之和为n的k个数的组合   数字只可使用1~9之间的数(包括 1 9)且每个数字只能使用1遍

题目中有两个限制条件:1)k个数      2)k个数的和为n    所以最终满足条件一个的组合一定要先判断是k个数,然后再计算这k个数的和为n,只有这样才是

回溯

回溯三部曲:

1)参数和返回值

2)终止条件     叶子节点  和为n的 k个数放入数组中

3)单层递归逻辑

sum不是参数

代码

class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(int k,int n,int startIndex){
        //终止条件
        int sum = 0;
        if(path.size()==k){
            for(int i=0;i<k;i++){
                sum += path[i];
            }
            if(sum==n){
                result.push_back(path);
            }
            return;
        }
        //单层搜索逻辑
        for(int i=startIndex;i<=9;i++){
            path.push_back(i);
            backtracking(k,n,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k,n,1);
        return result;
    }
};
Sum作为参数

伪代码

代码

class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(int targetSum,int k,int Sum,int startIndex){
        //终止条件
        if(path.size()==k){
            if(Sum==targetSum)
                result.push_back(path);
            return;
        }
        //单层搜索逻辑
        for(int i=startIndex;i<=9;i++){
            Sum += i;
            path.push_back(i);
            backtracking(targetSum,k,Sum,i+1);
            Sum -= i;
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(n,k,0,1);
        return result;
    }
};
剪枝

剪枝1

剪枝2

代码

class Solution {
public:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(int targetSum,int k,int Sum,int startIndex){
        if(Sum>targetSum) return;//剪枝1 
        //终止条件
        if(path.size()==k){
            if(Sum==targetSum)
                result.push_back(path);
            return;
        }
        //单层搜索逻辑
        for(int i=startIndex;i<=9-(k-path.size())+1;i++){
            Sum += i;
            path.push_back(i);
            backtracking(targetSum,k,Sum,i+1);
            Sum -= i;
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(n,k,0,1);
        return result;
    }
};
  • 时间复杂度: O(n * 2^n)
  • 空间复杂度: O(n)

题目2:17 电话号码的字母组合

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

题意

字符串中仅包含2-9,每个数字代表的字母和电话按键相同,返回其能表示的所有的字母组合

操作两个集合

回溯

回溯三部曲:

1)参数和返回值

2)终止条件   叶子节点收获结果

3)单层递归逻辑

代码

class Solution {
public:
    //数字与字符串映射  将数字下标对应到字母字符串  2->abc
    string letterMap[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    string path ;//存放单个结果
    vector<string> result;//存放结果集
    void backtracking(string& digits,int index){//这里注意& 
        //终止条件  index遍历到最后一个数字之后 存放结果
        if(index==digits.size()){
            result.push_back(path);
            return;
        }
        //单层递归逻辑
        //取出digits数字字符串中的单个字符 并将该字符转换为数字
        int digit = digits[index] - '0';
        //将该数字映射为字符串
        string letter = letterMap[digit];
        for(int i=0;i<letter.size();i++){
            path.push_back(letter[i]);
            backtracking(digits,index+1);//递归  将下标往后移动一个,指向下一个数字
            path.pop_back();//回溯
        }
    }
    vector<string> letterCombinations(string digits) {
        path.clear();
        result.clear();//这里的result一定要clear 不然后面的测试用例""会报错
        if(digits.size()==0) return result;
        backtracking(digits,0);//从数字字符串中的第1个字符开始遍历
        return result;
    }
};
  • 时间复杂度: O(3^m * 4^n),其中 m 是对应四个字母的数字个数,n 是对应三个字母的数字个数
  • 空间复杂度: O(3^m * 4^n)

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

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

相关文章

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…

AttributeError: module ‘numpy‘ has no attribute ‘float‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Linux第32步_编译ST公司的TF-A源码

正点原子STM32MP157开发板使用的CPU型号是STM32MP157DAA1&#xff0c;而开发板硬件参考了ST公司的STM32MP157 EVK开发板&#xff0c;因此我们在移植的时候需要关注“stm32mp157d-ev1”。 一、了解SDK 包 ST公司会从ARM官方下载TF-A软件包&#xff0c;然后将STM32MP1 芯片添加…

实例分割中mIOU的定义是什么?

问题描述&#xff1a;实例分割中mIOU的定义是什么&#xff1f; 问题解答&#xff1a; mIOU&#xff08;Mean Intersection over Union&#xff09;是实例分割任务中常用的性能指标之一&#xff0c;用于评估模型的准确性。mIOU 是每个类别的 Intersection over Union&#xff…

【Oracle】收集Oracle数据库内存相关的信息

文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …

原子操作以及原子操作类AtomicInteger简介

前言 问&#xff1a;什么是原子操作 什么是原子操作&#xff0c;所谓原子操作&#xff0c;就是一个操作是不能打断的操作。确切的说应该是不备其他线程或者任务影响的操作。 没错&#xff0c;原子操作就是你在家里的一次上厕所的操作 >> 进厕所&#xff0c;上锁&#…

TPM模拟器安装

目录 TPM模拟器安装 1&#xff09;安装配置所需依赖 2&#xff09;从官网下载TPM模拟器程序ibmtpm1332.tar.gz 3&#xff09;创建安装目录并将源码解压到对应目录 4&#xff09;进入解压后的目录&#xff0c;然后执行安装命令 5&#xff09;将tpm服务器添到Linux系统执行目…

【蓝桥杯日记】复盘篇一:深入浅出顺序结构

&#x1f680;前言 本期是一篇关于顺序结构的题目的复盘,通过复盘基础知识&#xff0c;进而把基础知识学习牢固&#xff01;通过例题而进行复习基础知识。 &#x1f6a9;目录 前言 1.字符三角形 分析&#xff1a; 知识点&#xff1a; 代码如下 2. 字母转换 题目分析: 知…

申请开启|成为亚马逊云科技 Community Builder,共建云端社区!

在探索由技术打造的云端世界时&#xff0c;和同行者一起学习&#xff0c;与技术专家共同探讨是开发者成长的最佳助力&#xff01; 亚马逊云科技开发者社区 Community Builders 为技术爱好者和新兴思想领袖提供技术资源、学习和交流机会&#xff0c;帮助开发者探索、分享技术相关…

windows如何切换访问NAS共享文件夹用户

从资源管理器对NAS共享文件夹输入用户名与密码进行访问后&#xff0c;想切换访问用户&#xff0c;搜索了一圈&#xff0c;网上介绍的方法都无效&#xff0c;最后只能注销windows7登陆&#xff0c;然后重新登陆&#xff0c;再访问NAS共享时才能切换用户&#xff0c;各位观众如有…

智能文件管理,按数量自动新建文件夹归类

文件管理&#xff0c;一直以来都是许多人头疼的问题。当你拥有大量的文件时&#xff0c;如何有效地归类和整理这些文件就显得尤为重要。现在&#xff0c;我们为你带来了一款全新的文件管理工具&#xff0c;让你轻松实现按数量自动新建文件夹进行归类&#xff01; 首先第一步&am…

数据库(MySQL库表操作)

目录 1.1 SQL语句基础&#xff08;SQL命令&#xff09; 1.1.1 SQL的简介 1.1.2 SQL语句的分类 1.1.3 SQL语句的书写规范 1.2 数据库操作 1.2.1 查看 1.2.2 自建库 1.2.3 切换数据库 1.2.4 删库 1.3 MySQL字符集 1.3.1 MySQL字符集包括&#xff1a; 1.3.2 utf8 和 u…

审稿周期短,且出版效率高的10本医学类中文核心期刊推荐!

常笑医学整理了适合医务工作者进行论文投稿的10本医学类中文核心期刊&#xff0c; 以及期刊详细参数&#xff0c;供大家参考。 1.《保健医学研究与实践》 &#xff08;详细投稿信息请点击刊物名称查看&#xff09; 简介&#xff1a;《保健医学研究与实践》是中国高校保健医学研…

SpringMVC环境搭配

概述 Spring MVC是Spring Framework提供的Web组件&#xff0c;全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架&#xff0c;提供前端路由映射、视图解析等功能 mvc是什么 MVC是一种软件架构思想&#xff0c;把软件按照模型&#xff0c;视图&#xff0c;控制器来划分…

架构篇05-复杂度来源:高可用

文章目录 计算高可用存储高可用高可用状态决策小结 今天&#xff0c;我们聊聊复杂度的第二个来源高可用。 参考维基百科&#xff0c;先来看看高可用的定义。 系统无中断地执行其功能的能力&#xff0c;代表系统的可用性程度&#xff0c;是进行系统设计时的准则之一。 这个定义…

R2DBC-响应式数据库

简单查询 基于全异步,响应式,消息驱动 用法: 1.导入驱动:导入连接池(r2dbc-pool),导入驱动(r2dbc-mysql) 2. 使用驱动提供的api操作 pom.xml <properties><r2dbc-mysql.version>1.0.5</r2dbc-mysql.version> </properties><dependencies><d…

浙江建筑模板批发 — 广西源头厂家供应

在建筑行业中&#xff0c;高质量的模板材料对于确保工程的顺利进行和质量至关重要。我们的浙江强度高耐水建筑模板&#xff0c;直接来自广西的源头厂家&#xff0c;以其出色的性能和质量&#xff0c;成为建筑项目的理想选择。 产品特性 高强度稳定性&#xff1a;精选优质材料制…

Java--类继承

文章目录 主要内容一.学生类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 二.交通工具类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 三.圆类1.源代码代码如下&#xff08;示例&#xff09;: 2.结果 总结 主要内容 学生类交通工具类圆类 一.学生类 具有…

2.RHCSA启动配置

rht-clearcourse 0 #重置练习环境 rht-setcourse rh134 #切换CSA练习环境 cat /etc/rht #查看当前环境 virt-manager #打开KVM控制台 rht-vmctl start classroom #必做&#xff0c;start all不会包含classroom&#xff0c;需…

Appium 环境配置

Appium 是一个开源的、跨平台的测试框架&#xff0c;可以用来测试 Native App、混合应用、移动 Web 应用&#xff08;H5 应用&#xff09;等&#xff0c;也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念&#xff1a; •无需用户对 App 进行任何修改或…