当前位置:网站首页>【Hot100】17. 电话号码的字母组合
【Hot100】17. 电话号码的字母组合
2022-07-01 15:49:00 【王六六的IT日常】
- 回溯
在循环里面套了递归调用
代码实现时有个小细节,如果是纯字符串拼接,会生成很多临时对象,性能会略差,Java实现中是用StringBuilder做拼接的,经测试耗时0毫秒,如果是用String类型做拼接耗时是6毫秒。
class Solution {
//一个映射表,第二个位置是"abc“,第三个位置是"def"。。。
//这里也可以用map,用数组可以更节省点内存
String[] letter_map = {
" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
//注意边界条件
if(digits==null || digits.length()==0) {
return new ArrayList<>();
}
iterStr(digits, new StringBuilder(), 0);
return res;
}
//最终输出结果的list
List<String> res = new ArrayList<>();
//递归函数
void iterStr(String str, StringBuilder letter, int index) {
//递归的终止条件,注意这里的终止条件看上去跟动态演示图有些不同,主要是做了点优化
//动态图中是每次截取字符串的一部分,"234",变成"23",再变成"3",最后变成"",这样性能不佳
//而用index记录每次遍历到字符串的位置,这样性能更好
if(index == str.length()) {
res.add(letter.toString());
return;
}
//获取index位置的字符,假设输入的字符是"234"
//第一次递归时index为0所以c=2,第二次index为1所以c=3,第三次c=4
//subString每次都会生成新的字符串,而index则是取当前的一个字符,所以效率更高一点
char c = str.charAt(index);
//map_string的下表是从0开始一直到9, c-'0'就可以取到相对的数组下标位置
//比如c=2时候,2-'0',获取下标为2,letter_map[2]就是"abc"
int pos = c - '0';
String map_string = letter_map[pos];
//遍历字符串,比如第一次得到的是2,页就是遍历"abc"
for(int i=0;i<map_string.length();i++) {
//调用下一层递归,用文字很难描述,请配合动态图理解
letter.append(map_string.charAt(i));
//如果是String类型做拼接效率会比较低
//iterStr(str, letter+map_string.charAt(i), index+1);
iterStr(str, letter, index+1);
letter.deleteCharAt(letter.length()-1);
}
}
}
- 队列
可以利用队列的先进先出特点,再配合循环
class Solution {
public List<String> letterCombinations(String digits) {
if(digits==null || digits.length()==0) {
return new ArrayList<String>();
}
//一个映射表,第二个位置是"abc“,第三个位置是"def"。。。
//这里也可以用map,用数组可以更节省点内存
String[] letter_map = {
" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"
};
List<String> res = new ArrayList<>();
//先往队列中加入一个空字符
res.add("");
for(int i=0;i<digits.length();i++) {
//由当前遍历到的字符,取字典表中查找对应的字符串
String letters = letter_map[digits.charAt(i)-'0'];
int size = res.size();
//计算出队列长度后,将队列中的每个元素挨个拿出来
for(int j=0;j<size;j++) {
//每次都从队列中拿出第一个元素
String tmp = res.remove(0);
//然后跟"def"这样的字符串拼接,并再次放到队列中
for(int k=0;k<letters.length();k++) {
res.add(tmp+letters.charAt(k));
}
}
}
return res;
}
}
边栏推荐
- Nuxt. JS data prefetching
- Sales management system of lightweight enterprises based on PHP
- The newly born robot dog can walk by himself after rolling for an hour. The latest achievement of Wu Enda's eldest disciple
- How to adjust the color of the computer screen and how to change the color of the computer screen
- How to write good code - Defensive Programming Guide
- ATSS:自动选择样本,消除Anchor based和Anchor free物体检测方法之间的差别
- process.env.NODE_ENV
- 药品溯源夯实安全大堤
- Zero copy technology of MySQL
- Task. Run(), Task. Factory. Analysis of behavior inconsistency between startnew() and new task()
猜你喜欢
Zhang Chi Consulting: lead lithium battery into six sigma consulting to reduce battery capacity attenuation
Tensorflow team: we haven't been abandoned
Nuxt. JS data prefetching
For the sustainable development of software testing, we must learn to knock code?
Don't ask me again why MySQL hasn't left the index? For these reasons, I'll tell you all
Smart Party Building: faith through time and space | 7.1 dedication
Microservice tracking SQL (support Gorm query tracking under isto control)
[300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (III)
6.2 normalization 6.2.6 BC normal form (BCNF) 6.2.9 normalization summary
Reading notes of top performance version 2 (V) -- file system monitoring
随机推荐
Overview | slam of laser and vision fusion
ThinkPHP advanced
基于PHP的轻量企业销售管理系统
Photoshop插件-HDR(二)-脚本开发-PS插件
What time do you get off work?!!!
[每日一氵]Latex 的通讯作者怎么搞
laravel的模型删除后动作
ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification
【开源数据】基于虚拟现实场景的跨模态(磁共振、脑磁图、眼动)人类空间记忆研究开源数据集
三星率先投产3nm芯片,上海应届硕士生可直接落户,南开成立芯片科学中心,今日更多大新闻在此...
Crypto Daily:孙宇晨在MC12上倡议用数字化技术解决全球问题
ABAP-屏幕切换时,刷新上一个屏幕
There is a difference between u-standard contract and currency standard contract. Will u-standard contract explode
2023届春招实习-个人面试过程和面经分享
How does win11 set user permissions? Win11 method of setting user permissions
Lean Six Sigma project counseling: centralized counseling and point-to-point counseling
vim 从嫌弃到依赖(22)——自动补全
Zero copy technology of MySQL
Share the daily work and welfare of DJI (Shenzhen headquarters) in Dajiang
STM32F1与STM32CubeIDE编程实例-PWM驱动蜂鸣器生产旋律