您的位置:首页 > 新闻 > 资讯 > 【Hot100】LeetCode—17. 电话号码的字母组合

【Hot100】LeetCode—17. 电话号码的字母组合

2024/10/6 14:15:08 来源:https://blog.csdn.net/weixin_44382896/article/details/141600517  浏览:    关键词:【Hot100】LeetCode—17. 电话号码的字母组合

目录

  • 1- 思路
    • String数组(哈希表) + 回溯
  • 2- 实现
    • ⭐17. 电话号码的字母组合——题解思路
  • 3- ACM 实现


  • 题目连接:17. 电话号码的字母组合

1- 思路

String数组(哈希表) + 回溯

思路

  • 通过 String 数组实现哈希表,存储 0-9 的哈希表映射

回溯三部曲

  • ① 参数及返回值
    • numToStr:String 的哈希表,用来存储 0-9 的映射
    • digits:输入的 字符串,比如 “56”
    • index :因为需要通过 具体的数字,去 numToStr 中取出映射结果,因此 index 用来记录 digits 遍历到了哪一位
  • ② 终止条件
    • index 达到了 digits 的长度
    • 此时收集结果,将 sb.toString 收集到 res
  • ③ 回溯逻辑
    • 3.1 通过 index 来获取映射的子字符串 str
    • 3.2 通过回溯遍历子字符串 str 收集结果

2- 实现

⭐17. 电话号码的字母组合——题解思路

在这里插入图片描述

class Solution {List<String> res = new ArrayList<>();public List<String> letterCombinations(String digits) {if(digits.length() == 0 || digits == ""){return res;}String[] numToStr = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};backTracing(digits,numToStr,0);return res;}StringBuilder sb = new StringBuilder();public void backTracing(String digits,String[] numToStr,int index){// 结果收集,终止条件if(digits.length() == index){res.add(sb.toString());return;}// 获取当前映射子串String str = numToStr[digits.charAt(index)-'0'];for(int i = 0 ; i < str.length() ;i++){sb.append(str.charAt(i));backTracing(digits,numToStr,index+1);sb.deleteCharAt(sb.length()-1);}}
}

3- ACM 实现

package Daily_LC.Month8_Week4.Day140;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** Solution4** @author alcohol* @Description* @since 2024-08-27 11:35*/
public class Solution4 {static List<String> res = new ArrayList<>();public static List<String> combination(String digits){if(digits.length()==0 || digits==""){return res;}String[] numToStr = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};backTracing(digits,numToStr,0);return res;}static StringBuilder sb = new StringBuilder();public static void backTracing(String digits,String[] numsToString,int index){// 终止条件if(index == digits.length()){res.add(sb.toString());return;}String str = numsToString[digits.charAt(index)-'0'];for(int i = 0 ; i < str.length();i++){sb.append(str.charAt(i));backTracing(digits,numsToString,index+1);sb.deleteCharAt(sb.length()-1);}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();combination(input);System.out.println("结果是"+res.toString());}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com