Leetcode17 电话号码组合

该博客介绍了如何利用回溯算法解决LeetCode第17题,即给定数字字符串生成所有可能的字母组合。博主详细解释了思路,指出由于无需考虑重复,可以简化回溯过程,并提供了相应的Java代码实现。代码中定义了数字到字母的映射,并通过递归的回溯方法生成所有组合,最终将结果存储在列表中返回。
摘要由CSDN通过智能技术生成
Leetcode17 电话号码组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

思路:大家都能想到,我每次从里面选择一个数,然后把所有的可能都存一下不就行了么,确实这就是经典的回溯便利所有数且由于不用考虑回头甚至不需要写visited

//回溯的模版 返回值类型必然跟着传,遇到符合条件的就可以加进去,最后return这个就行了
//其余的根据需求,一般传递index来表明现在是到哪儿了,方便return出来
class Solution {
    String[] num=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    public List<String> letterCombinations(String digits) {
        if(digits.length()==0){
            return new ArrayList<String>();
        }
        char[]input=digits.toCharArray();
        StringBuilder s=new StringBuilder();
        List<String>result=new ArrayList<>();
    trace(input,0,s,result);
    return result;
    }
    public void trace(char[] input,int index,StringBuilder s,List<String> result){
       
        if(s.length()==input.length){
            result.add(s.toString());
        }
         if(index>=input.length){
            return ;
        }
      //每次选择index对应的数字下有几种选择 append进去继续回溯是一条路,delete掉选择下一个放进去是另一条路
        char[]c=num[input[index]-'0'].toCharArray();
        for(int i=0;i<c.length;i++){
            s.append(c[i]);
            trace(input,index+1,s,result);
            s.deleteCharAt(s.length()-1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值