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

题目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->abcstring 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.rhkb.cn/news/242568.html

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

相关文章

C#使用DateTime.Now静态属性动态获得系统当前日期和时间

目录 一、实例 1.源码 2.生成效果 二、相关知识点 1.Thread类 &#xff08;1&#xff09;Thread.Sleep()方法 &#xff08;2&#xff09;Thread(ThreadStart) &#xff08;3&#xff09;IsBackground &#xff08;4&#xff09;Invoke( &#xff09; 2.CreateGrap…

༺༽༾ཊ—Unity之-01-单例模式—ཏ༿༼༻

在游戏开发过程中&#xff0c;我们会创建各种各样的类&#xff0c;再用new生成实例&#xff0c;有些时候我们需要这个类在整个游戏中是唯一出现的&#xff0c;比如一些管理器比如声音管理器等&#xff0c;没必要创建很多实例&#xff0c;就算有很多模块需要各种声音功能&#x…

为什么国产操作系统是基于linux研发的呢?

为什么国产操作系统是基于linux研发的呢&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&am…

数字IC笔试题——门控时钟与控制信号电平、与门门控、或门门控、上升沿门控、下降沿门控

门控时钟问题。 &#xff08;华为-2019-芯片-数字-34&#xff09; 从后端设计考虑&#xff0c;在必须使用门控时钟的时候&#xff0c;需要遵循一个原则&#xff1a;门控时钟的输出只能跟着时钟信号进行跳变&#xff0c;而不能跟着控制信号进行跳变&#xff0c;也就是说对于用N…

“GPC爬虫池有用吗?

作为光算科技的独有技术&#xff0c;在深入研究谷歌爬虫推出的一种吸引谷歌爬虫的手段 要知道GPC爬虫池是否有用&#xff0c;就要知道谷歌爬虫这一概念&#xff0c;谷歌作为一个搜索引擎&#xff0c;里面有成百上千亿个网站&#xff0c;对于里面的网站内容&#xff0c;自然不可…

【linux驱动】用户空间程序与内核模块交互-- IOCTL和Netlink

创建自定义的IOCTL&#xff08;输入/输出控制&#xff09;或Netlink命令以便用户空间程序与内核模块交互涉及几个步骤。这里将分别介绍这两种方法。 一、IOCTL 方法 1. 定义IOCTL命令 在内核模块中&#xff0c;需要使用宏定义你的IOCTL命令。通常情况下&#xff0c;IOCTL命令…

IDEA在重启springboot项目时没有自动重新build

IDEA在重启springboot项目时没有自动重新build 问题描述 当项目里面某些依赖或者插件更新了&#xff0c;target的class文件没有找到&#xff0c;导致不是我们需要的效果。 只能手动的清理target文件&#xff0c;麻烦得很 &#xff0c; 单体项目还好说&#xff0c;一次清理就…

pycharm import torch

目录 1 安装 2 conda环境配置 3 测试 开始学习Pytorch! 1 安装 我的电脑 Windows 11 Python 3.11 Anaconda3-2023.09-0-Windows-x86_64.exe cuda_11.8.0_522.06_windows.exe pytorch &#xff08;管理员命令行安装&#xff09; pycharm-community-2023.3.2.exe 2 c…

代码随想录 Leetcode150. 逆波兰表达式求值

题目&#xff1a; 代码(首刷看解析 2024年1月21日&#xff09;&#xff1a; class Solution { public:int evalRPN(vector<string>& tokens) {stack<long long> st; for (int i 0; i < tokens.size(); i) {if (tokens[i] "" || tokens[i] &qu…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

力扣每日一题---1547. 切棍子的最小成本

//当我们将棍子分段之后&#xff0c;我们是不是想到了怎么组合这些棍子 //并且这些棍子有一个性质就是只能与相邻的进行组合 //暴力搜索的话复杂度很高 //在思考暴力搜索的时候&#xff0c;我们发现一个规律 //比如棍子长度1 2 1 1 2 //那么与最后一个2组合的棍子有&#xff0c…

【网络安全】-入门版

secure 一、基本工具1、metasploit framework ps.本着兴趣爱好&#xff0c;加强电脑的安全防护能力&#xff0c;并严格遵守法律和道德规范。一、基本工具 1、metasploit framework msf&#xff08;metasploit framework&#xff09;是一个开源的渗透测试框架&#xff0c;用于…

Qt QCustomPlot 绘制子轴

抄大神杰作&#xff1a;QCustomplot&#xff08;五&#xff09;QCPAxisRect进行子绘图-CSDN博客文章浏览阅读5.9k次&#xff0c;点赞7次&#xff0c;收藏60次。文中介绍了QCustomPlot 子绘图需要掌握的类&#xff0c;也就是Matlab中的subplot&#xff0c;最后给出了一个完整的例…

Flash读取数据库中的数据

Flash读取数据库中的数据 要读取数据库的记录&#xff0c;首先需要建立一个数据库&#xff0c;并输入一些数据。数据库建立完毕后&#xff0c;由Flash向ASP提交请求&#xff0c;ASP根据请求对数据库进行操作后将结果返回给Flash&#xff0c;Flash以某种方式把结果显示出来。 …

flink基础概念之什么是时间语义

什么是时间语义 Flink支持三种不同的时间语义&#xff0c;以便处理流式数据中的事件时间、处理时间和摄入时间。 1. 处理时间&#xff08;Processing Time&#xff09; 处理时间的概念非常简单&#xff0c;就是指执行处理操作的机器的系统时间。 在这种时间语义下处理窗口非…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了&#xff0c;这个最短路我学了好几天&#xff0c;当然也学了别的算法啦&#xff0c;也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图&#xff0c;要求的是图中一个点到起点的距离&#xff0c;其中我们要输入点和点之间的距离&#xff0c;来求…

2024年【金属非金属矿山(地下矿山)安全管理人员】证考试及金属非金属矿山(地下矿山)安全管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员】证考试及金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员模拟考试题库&#xff0c;包含金属非金属矿山&#xff08;地下矿山&…

Spring DI

目录 什么是依赖注入 属性注入 构造函数注入 Setter 注入 依赖注入的优势 什么是依赖注入 依赖注入是一种设计模式&#xff0c;它通过外部实体&#xff08;通常是容器&#xff09;来注入一个对象的依赖关系&#xff0c;而不是在对象内部创建这些依赖关系。这种方式使得对象…

复现PointNet++(语义分割网络):Windows + PyTorch + S3DIS语义分割 + 代码

一、平台 Windows 10 GPU RTX 3090 CUDA 11.1 cudnn 8.9.6 Python 3.9 Torch 1.9.1 cu111 所用的原始代码&#xff1a;https://github.com/yanx27/Pointnet_Pointnet2_pytorch 二、数据 Stanford3dDataset_v1.2_Aligned_Version 三、代码 分享给有需要的人&#xf…