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,一经查实,立即删除!

相关文章

Blockquotes,引用,html里面,经常用到的一个!

blockquote元素的使用已经非常多样化&#xff0c;但语义上它只适用于一件事–标记了一段你的网页被引用从另一来源。这意味着&#xff0c;如果你想让那些花俏的引文&#xff0c;<blockquote>是不是你应该使用元素。让我们看一看如何你应该使用此元素&#xff1a; <art…

仔细分析了下这7行,貌似时间复杂度,空间复杂度都不大,为嘛就是执行效率这么低?...

for(Girl girl Girls.first(); !myGirlFriend.like(me); girl Girls.next()){if(!girl.hasBoyFriend(now) && i.like(girl)) { GirlFriend myGirlFriend (GirlFriend)girl; }} 转载于:https://www.cnblogs.com/naran/archive/2011/12/28/2305467.html…

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…

c++编程思想2 --友元存储控制

友元friend在c中的应用 我们知道在c的类访问权限中,private和 protected在类外面进行访问的时候 会因为权限而不能访问 &#xff0c;友元就解决了这个问题 。 可以这样理解&#xff0c;他为外部的 函数 或者类 进行了 访问授权,其实这已经超出OOP的范畴,但是对于C而言是以实用…

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的频次…

总结一下ERP .NET程序员必须掌握的.NET技术,掌握了这些技术工作起来才得心应手...

从毕业做.NET到现在&#xff0c;有好几年了&#xff0c;自认为只能是达到熟练的水平&#xff0c;谈不上精通。所以&#xff0c;总结一下&#xff0c;自己到底熟练掌握了哪些.NET方面的开发技术&#xff0c;以此对照&#xff0c;看看还有哪些不足&#xff0c;欢迎补充。 1 .NET …

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…

示例 Demo 工程和 API 参考链接

Camera Explorer&#xff1a;有关 Windows Phone8 中有关增强 Camera API 的使用。文章链接 Filter Effects&#xff1a;对拍摄的照片或者图片库中的照片应用 Nokia Imaging SDK 中的滤镜。文章链接 Filter Explorer&#xff1a;演示了对新拍摄图片或者现有图片的编辑功能&…

三、标签准备

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

ubuntu 8.04安装应用软件Can't find X includes错误解决办法

系统很小。应用软件都的自己装。 首先把 APT’s database is not updated. # apt-get update    # apt-get upgrade 再装其它软件。 make xconfigure 无法运行时&#xff1a; apt-get install qt3-dev-tools 编译QVFB  是出现&#xff1a; 出现&#xff1a;C preproces…

leetcode 39. 组合总和 思考分析

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

java uuid静态方法_Java UUID equals()方法与示例

java uuid静态方法UUID类equals()方法 (UUID Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this object equals to the given object or not. equals()方法用于检…

一、机器学习概念

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

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

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

第一篇博文

刚刚申请博客&#xff0c;开通了&#xff0c;很高兴。但是由于这几天考试比较多&#xff0c;等考完之后&#xff0c;再开始正式写博客&#xff0c;与诸君共进步&#xff01; 2012/1/1 18:20 转载于:https://www.cnblogs.com/zhenglichina/archive/2012/01/01/2309561.html

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

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

java vector_Java Vector size()方法与示例

java vector矢量类size()方法 (Vector Class size() method) size() method is available in java.util package. size()方法在java.util包中可用。 size() method is used to return the size (i.e. the number of the element exists) of this Vector. size()方法用于返回此V…