力扣:17. 电话号码的字母组合

回溯解题思路:

1.先把0到9的对应的字符串用一个string类型的数组来储存起来,之后写回溯函数,组合的终止条件为s.length()==digits.length(),同时也要防止i下标超出string类型digits中的索引范围 ,之后就是找到对影数字的字符串的下标,用for循环来进行遍历组合,达到组合长度后,进行回溯操作。

class Solution { 
    //接收的全部的字母组合
     List<String> li=new ArrayList<>();
     //接收单个字母组合
     String s="";
    public List<String> letterCombinations(String digits) {
        //把0到9对应的值存入到string类型的数组中
           String[] st={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
          //如果输入值为0直接返回空数组
          if(digits.length()==0){
              return li;
          }
          //调用回溯函数
           huisu(0,st,digits);
           return li;
    }
    public void huisu(int i,String[] st,String digits){
        //组合的终止条件
         if(s.length()==digits.length()){
            li.add(s);
            return ;
         }
         //防止i下标超出string类型digits中的索引范围
         if(i==digits.length()){
             return;
         }
         //找到对应数字的字符串下标
         int j=Integer.parseInt(""+digits.charAt(i));
         //for循环来进行遍历
         for(int k=0;k<st[j].length();k++){
             //把对应数字的字符串中的值加入到接收单个字母组合中
              s+=st[j].charAt(k); 
              //进行递归来遍历全部的组合
              huisu(i+1,st,digits);
              //达到组合长度后,进行回溯操作
              s=s.substring(0, s.length()-1);
         }
    }
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值