题目来源
题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射与电话按键相同。注意 1 不对应任何字母。

思路:
暴力法:多少个数字就多少个循环,循环长度为对应字符数组的长度
如果取最大长度为4,那么循环为o(n^4)。
前提---先建立对应关系数组;
结构---由i遍历所有字符。字符转化成数字对应的字符串进行组合;
判断---循环数字对应的字符串字符,然后进行组合。(拎一个出来做基准)
组合的原则是每个数字都要从对应的字符串中提供一个字符。
长度为3的字符串可以贡献3个字符,长度为4的字符串可以贡献4个字符,
如何衡量这个贡献度呢,判断长度;
收获:
1---set与list的区别。set无重复对象,list可重复对象。
2---如何取出list元素的值并进行修改?修改list中下标为index对象的值:set(index, element)增添:add(index, element)
3---如果考虑异常输入的情形,单个字符判断其合法性。
4---每次迭代获取一个字符串,所以会设计大量的字符串拼接,考虑选择更为高效的 StringBuildStringBuilder temp = new StringBuilder();temp.append(str.charAt(i));list.add(temp.toString());
5---使用暴力法时注意做回退。

以下为Java代码实现:

class Solution {public List<String> letterCombinations(String digits) {List <String> list=new ArrayList<>();//考虑输入为空的情况if(digits.length()==0||digits==null){return list;}String[] trans= {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};if(digits.length()==1){int index=Integer.valueOf(digits);for(int i=0;i<trans[index].length();i++){list.add(String.valueOf(trans[index].charAt(i)));}return list;}if(digits.length()==2){char [] ch_temp=digits.toCharArray();int index=ch_temp[0]-'0';for(int i=0;i<trans[index].length();i++){StringBuilder temp = new StringBuilder();temp.append(trans[index].charAt(i));int index1=ch_temp[1]-'0';for(int j=0;j<trans[index1].length();j++){temp.append(trans[index1].charAt(j));list.add(temp.toString());temp.deleteCharAt(temp.length()-1);}}return list;}if(digits.length()==3){char [] ch_temp=digits.toCharArray();int index=ch_temp[0]-'0';for(int i=0;i<trans[index].length();i++){StringBuilder temp = new StringBuilder();temp.append(trans[index].charAt(i));int index1=ch_temp[1]-'0';for(int j=0;j<trans[index1].length();j++){temp.append(trans[index1].charAt(j));int index2=ch_temp[2]-'0';for(int k=0;k<trans[index2].length();k++){temp.append(trans[index2].charAt(k));list.add(temp.toString());temp.deleteCharAt(temp.length()-1);}temp.deleteCharAt(temp.length()-1);}}return list;}if(digits.length()==4){char [] ch_temp=digits.toCharArray();int index=ch_temp[0]-'0';for(int i=0;i<trans[index].length();i++){StringBuilder temp = new StringBuilder();temp.append(trans[index].charAt(i));int index1=ch_temp[1]-'0';for(int j=0;j<trans[index1].length();j++){temp.append(trans[index1].charAt(j));int index2=ch_temp[2]-'0';for(int k=0;k<trans[index2].length();k++){temp.append(trans[index2].charAt(k));int index3=ch_temp[3]-'0';for(int kk=0;kk<trans[index3].length();kk++){temp.append(trans[index3].charAt(kk));list.add(temp.toString());temp.deleteCharAt(temp.length()-1);}temp.deleteCharAt(temp.length()-1);}temp.deleteCharAt(temp.length()-1);}}return list;}return list;}
}


暴力无敌。
提升:前面的思路实际上是暴力实现的过程。
实际上这道题的核心应该是利用递归+回溯来处理。
等理清楚递归+回溯这个知识点再做补充。
路漫漫其修远兮。

电话号码的字母组合---2022/01/23相关推荐

  1. 2022.01.23【读书笔记】丨生物信息学与功能基因组学(第六章 多重序列比对 上)

    学习目标 理解使用ClustalW进行多重序列比对(MSA)的三个主要阶段: 描述几种其他的多重序列比对(MSA)程序,了解他们的工作原理,比对它们与ClustalW的异同: 理解进行基准研究的重要性 ...

  2. 《安富莱嵌入式周报》第249期:2022.01.17--2022.01.23

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  3. 《LeetCode力扣练习》第17题 电话号码的字母组合 Java

    <LeetCode力扣练习>第17题 电话号码的字母组合 Java 一.资源 题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.答案可以按 任意顺序 返回. 给出数 ...

  4. LeetCode 17电话号码的字母组合(搜索)18四数之和

    电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23 ...

  5. 【LeetCode】【HOT】17. 电话号码的字母组合(递归)

    [LeetCode][HOT]17. 电话号码的字母组合 文章目录 [LeetCode][HOT]17. 电话号码的字母组合 package hot;import java.util.ArrayLis ...

  6. [DFS|回溯法] leetcode 17 电话号码的字母组合

    [DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...

  7. 算法训练Day25 | LeetCode216. 组合总和III(和77.组合很像!);LeetCode17. 电话号码的字母组合(不同集合中组合)

    目录 LeetCode216. 组合总和III 1. 思路 2. 代码实现 3. 剪枝 4. 复杂度分析 5. 思考与收获 LeetCode17. 电话号码的字母组合 1. 思路 2. 代码实现 3. ...

  8. leetcode17 电话号码的字母组合,39 组合总和(python)

    文章目录 17. 电话号码的字母组合 分析 代码 通过截图 39. 组合总和 分析 代码 通过截图 代码 通过截图 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的 ...

  9. day21|216.组合总和III、17.电话号码的字母组合

    216.组合总和III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回所有可能的有效组合的列表 .该列表不能包含相同的组合两次,组合可以以 ...

  10. Day25|组合板子|216. 组合总和 III| 17. 电话号码的字母组合

    组合板子+剪枝 216. 组合总和 III 剪枝操作? 17. 电话号码的字母组合 216. 组合总和 III class Solution {private:vector<int>tem ...

最新文章

  1. 一口气说出 5 种 IO 模型,蒙圈了!
  2. PowerDesigner165安装婆姐汉花教程
  3. C#200个基础工具类,史上最全快收藏下载
  4. mysql事务未提交读_mysql事务之未提交读Read uncommitted(仅学习)
  5. 机考可以作弊吗_法考主观题也全面机考?不慌,看这篇文章
  6. 大容量导入和导出数据 -- 格式化文件生成
  7. 一个前端的入行故事,零基础,2个月自学入门前端,半年从外包进淘宝
  8. sql server 内存_SQL Server内存性能指标–第6部分–其他内存指标
  9. 电视动态测试软件,[4K演示] 你的电视能顶得住吗?精神污染MAX的SONY4K动态测试......
  10. standard fifo和fwft fifo的区别
  11. Linux Minit Xshell5连接虚拟机Minit
  12. 数据挖掘领域十大经典算法之—C4.5算法(超详细附代码)
  13. Scroller全认知,对于Scroller 你真的了解吗?
  14. file_operations结构体介绍
  15. linux 内存映射-ioremap和mmap函数
  16. 永洪bi日志清理配置
  17. SOS:硬盘数据丢失怎么办?
  18. 2021-06-09
  19. 老板无偿征用你的朋友圈,你愿意吗?
  20. 霍纳法则(Horner‘s rule)

热门文章

  1. VirtuoZo:航摄影像的处理及拼接
  2. MYSQL_DQL语言的学习(1)
  3. cubeIDE开发,在LCD显示摄像头抓取的图片数据
  4. 老外的各种no-sql数据库的比较贴
  5. yar php使用,PHP yar的使用简介
  6. 报错:Ncat: bind to :::8888: Address already in use. QUITTING
  7. Android获取手机MAC地址
  8. 键盘轴体怎么选,HHKB键盘来告诉你
  9. Markdown 图片排版
  10. ★SMILES数据处理+评价指标所有的代码