leetcode 17. 电话号码的字母组合 思考分析

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

思考与递归程序

解空间树的宽度是输入数字对应的字符的个数,深度是输入的数字的个数。
确定回溯函数参数
与之前leetcode 216. 组合总和 III 思考分析一样,我们需要建立两个全局变量,一个存放叶子结点子结果,一个用来存放所有子结果。
参数:第一个是string digits(数字字符串),一个是int index.
用index记录遍历第几个数字了。

vector<string> result;
string res;
void backtracking(const string& digits,int index)

确定终止条件
当index等于数字个数时收集结果,返回。

if(index == digits.size())
{result.push_back(s);return;
}

单层逻辑
取第index个数字,并且找到对应的字符集。然后for循环这个字符集(for循环处理的是当层的树宽度有关数据)
同时注意原来的字符类型的数字,要进行转换。

int digit = digits[index]-'0';
string letters = letterMap[digit];		//取出对应的字符集
for(int i=0;i<letters.size();i++)
{res.push_back(letters[i]);backtracking(digits,index+1);res.pop_back();				//回溯
}

异常输入情况输入处理
如果输入1、*、#等字符时,我们应该返回并且打印出错误信息

//判断是否有非法字符
if(digits[index]=='0' || digits[index]=='1'|| digits[index]=='*'|| isValid == false)
{isValid=false;result.clear();//res.clear();		如果这里clear的话,返回到上一层的时候,会有个回溯操作res.pop,会导致报错return;
}

完整代码:

class Solution {
public:const string letterMap[10]={"",     //0"",     //1"abc",  //2"def",  //3"ghi",  //4"jkl",  //5"mno",  //6"pqrs", //7"tuv",  //8"wxyz", //9};vector<string> result;string res;bool isValid =true;void backtracking(const string& digits,int index){if(index == digits.size()){result.push_back(res);return;}//判断是否有非法字符if(digits[index]=='0' || digits[index]=='1'|| digits[index]=='*'|| isValid == false){isValid=false;result.clear();//res.clear();return;}int digit = digits[index]-'0';string letters = letterMap[digit];		//取出对应的字符集for(int i=0;i<letters.size();i++){res.push_back(letters[i]);backtracking(digits,index+1);res.pop_back();				//回溯}}vector<string> letterCombinations(string digits) {result.clear();res.clear();isValid = true;if(digits.size() == 0) return result;backtracking(digits,0);if(isValid == false)    cout<<"输入的字符中有异常"<<endl;return result;}
};

对错误案例的测试:
很显然,力扣的测试程序中并没有考虑异常输入
在这里插入图片描述
在这里插入图片描述

语法细节

1、函数传参中
直接用string s相当于是拷贝了一份,而用&不用拷贝内存。
2、在函数中如果用不带const的引用会报错:
临时变量不能作为非const的引用参数,换句话说就是要引用临时变量必须带上const,这是c++的语法规范。
函数参数作为引用,函数就有责任把函数内存操作此参数的结果给出来。但是这个是一个临时变量,随时可能释放掉。所以为了避免这个现象,就加上一个规则,不带const的临时变量不让通过。

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

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

相关文章

BHMS的完整形式是什么?

BHMS&#xff1a;顺势疗法医学和外科学士 (BHMS: Bachelor of Homeopathic Medicine and Surgery) BHMS is an abbreviation of Bachelor of Homeopathic Medicine and Surgery. It is a medical degree program for under graduation in Homeopathy; an alternative move towa…

WordPress Event Easy Calendar插件多个跨站请求伪造漏洞

漏洞名称&#xff1a;WordPress Event Easy Calendar插件多个跨站请求伪造漏洞CNNVD编号&#xff1a;CNNVD-201309-083发布时间&#xff1a;2013-09-11更新时间&#xff1a;2013-09-11危害等级&#xff1a; 漏洞类型&#xff1a;跨站请求伪造威胁类型&#xff1a;远程CVE编号&…

XML转txt格式脚本

一、东北大学老师收集的钢材缺陷数据集是XML格式的&#xff0c;但是YOLOv5只允许使用txt文件标签 例如其中一种缺陷图片所对应的标签&#xff1a;crazing_1.xml <annotation><folder>cr</folder><filename>crazing_1.jpg</filename><source&…

python程序生成exe_使用Python程序生成QR代码的Python程序

python程序生成exeQR code is a short form of the quick response code. It is a type of matrix barcode that contains some information like some specific link, important message, email-id, etc. In Python, the qrcode module is used to generate the QR code of so…

leetcode 242. 有效的字母异位词 思考分析

题目 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 我们先考虑低阶版本&#xff0c;认为字符只有26种可能&#xff0c;然后将a ~ z的字符映射到数组的索引0 ~ 25&#xff0c;数组中存放的则是该索引出现的频次。 记录下s的频次和t的频次…

js \n直接显示字符串_显示N个字符的最短时间

js \n直接显示字符串Problem statement: 问题陈述&#xff1a; You need to display N similar characters on a screen. You are allowed to do three types of operation each time. 您需要在屏幕上显示N个相似的字符。 每次允许您执行三种类型的操作。 You can insert a c…

三、标签准备

所有操作均在anaconda中的自己配置的环境下进行 一、安装labelimg 因为YOLO模型所需要的样本标签必须是txt类型&#xff0c;本人使用labelimg软件进行对图像进行打标签操作。 pip install pycocotools-windows pip install pyqt5 pip install labelimg 通过labelimg命令打…

leetcode 39. 组合总和 思考分析

目录1、题目2、思考分析3、未经优化代码4、剪枝优化1、题目 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 2、思考分析 解空间树宽度部分即数…

一、机器学习概念

一、何为机器学习(Mechine Learning)&#xff1f; 答&#xff1a;利用已有数据(经验)&#xff0c;来训练某种模型&#xff0c;利用此模型来预测未来。机器学习是人工智能的核心Mechine Learning。 例如&#xff1a;你和狗蛋儿7点在老槐树下集合&#xff0c;如何一块约去开黑&a…

Java线程新特征——Java并发库

一、线程池 Sun在Java5中&#xff0c;对Java线程的类库做了大量的扩展&#xff0c;其中线程池就是Java5的新特征之一&#xff0c;除了线程池之外&#xff0c;还有很多多线程相关的内容&#xff0c;为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序&#xff0c;…

leetcode 40. 组合总和 II 思考分析

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 思考以及代码 如果我们直接套用39题的思路&#xff0c;那么就会出现重复的组合。 重复组合的…

二、线性回归

一、回归 可以拿正态分布为例&#xff0c;比如身高&#xff0c;若平均身高为1.78m&#xff0c;绝大多数人都是1.78m左右&#xff0c;超过2m的很少&#xff0c;低于1m的也不多。 很多事情都会回归到一定的区间之内&#xff0c;即回归到平均值。 机器学习没有完美解&#xff0c…

【转】HMM学习最佳范例五:前向算法1 .

五、前向算法&#xff08;Forward Algorithm&#xff09; 计算观察序列的概率&#xff08;Finding the probability of an observed sequence&#xff09; 1.穷举搜索&#xff08; Exhaustive search for solution&#xff09;  给定隐马尔科夫模型&#xff0c;也就是在模型参…

leetcode 349. 两个数组的交集 思考分析

题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 1、暴力双for循环 class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> result;vector<int> res;if(nums1.siz…

三、梯度下降法求解最优θ值

一、梯度下降法(GD&#xff0c;Gradient Descent) Ⅰ、得到目标函数J(θ)&#xff0c;求解使得J(θ)最小时的θ值 当然&#xff0c;这里只是取了俩特征而已&#xff0c;实际上会有m个特征维度 通过最小二乘法求目标函数最小值 令偏导为0即可求解出最小的θ值&#xff0c;即…

leetcode 131. 分割回文串 思考分析

题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 思考 问题可以分为两个子问题&#xff1a;1、判断回文串2、分割数组 判断回文串 bool isPalindrome_string(string s,int startindex,int endinde…

android淡入淡出动画_在Android中淡入动画示例

android淡入淡出动画1) XML File: activity_main 1)XML文件&#xff1a;activity_main <?xml version"1.0" encoding"utf-8"?><android.support.constraint.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android&…

[慢查优化]联表查询注意谁是驱动表 你搞不清楚谁join谁更好时请放手让mysql自行判定...

写在前面的话&#xff1a; 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程&#xff1b; 不要求每个人一定知道线上&#xff08;现在或未来&#xff09;哪张表数据量大&#xff0c;哪张表数据量小&#xff1b; 但把mysql客户端&#xff08;如SQL…

四、梯度下降归一化操作

一、归一化 Ⅰ什么是归一化&#xff1f; 答&#xff1a;其实就是把数据归一到0-1之间&#xff0c;也就是缩放。 常用的归一化操作是最大最小值归一化&#xff0c;公式如下&#xff1a; 例如&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;9&#xff0c;10…

[转帖][强烈推荐]网页表格(Table/GridView)标题栏和列冻结(跨浏览器兼容)

GridView的标题栏、列冻结效果(跨浏览器版) 本文来源&#xff1a;http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/02/18/supertable-plugin-for-jquery.aspx 稍早发表了GridView 的标题列冻结效果&#xff0c;足以满足工作上的需求&#xff0c;不过存在两个缺点:…