【Leetcode-字符串】电话号码的字母组合

电话号码的字母组合
难度:中等
在这里插入图片描述
今天的每日一题 累加数运用到了dfs(深度优先算法),因为之前对这个算法不太了解,所以看了一些视频和博客,所以打算先拿这道题来试试水。
运用dfs求解的核心在于两点:
1、找到截止条件
2、找出“候选人”并筛选
在这道题中,我们的截止条件为遍历的下标==字符串长度,而**“候选人”为数字对应的字母**。
代码如下:

	//定义一个char二维数组,外层为手机上的按键数字,内层为数字对应的字母
	static char[][] ch = new char[][]{
            {},
            {},{'a','b','c'},{'d','e','f'},
            {'g','h','i'},{'j','k','l'},{'m','n','o'},
            {'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}
    };
    public List<String> letterCombinations(String digits) {
    	//边界条件处理
        if(digits.equals("")) return new ArrayList();
        dfs(digits,0);
        return res;
    }
    StringBuilder sb = new StringBuilder();
    List<String> res = new ArrayList();
    public void dfs(String str,int index){
        //截止条件
        if(str.length()==index){
            res.add(sb.toString());
            return;
        }

        //候选人(通过-'0'等到int类型的数字)
        for(char c:ch[str.charAt(index)-'0']){
            sb.append(c);
            //递归
            dfs(str,index+1);
            //回溯
            sb.deleteCharAt(sb.length()-1);
        }
    }

执行结果:成功
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值