力扣 电话号码的字母组合

举报
奥利AO 发表于 2021/06/28 21:15:48 2021/06/28
【摘要】 回溯 递归 力扣

电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

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

示例 1:

输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:

输入:digits = “”
输出:[]
示例 3:

输入:digits = “2”
输出:[“a”,“b”,“c”]

思路

题目是要求解出所有的解的组合情况,组合问题,会用到回溯法。
回溯法的常规解法肯定有递归。
递归首先会涉及到退出机制,具体这道题,应该就是递归的序号==参与递归的字符串。递归的核心,即是将新的字符拼接到已有的字符串基础上。

代码

class Solution {
    private List<String> res;

    private String[] str;

    public List<String> letterCombinations(String digits) {
        str = new String[] {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        if (digits == null || digits.length() == 0) {
            return new ArrayList<>();
        }
        res = new ArrayList<>();
        roll(digits, 0, "");
        return res;
    }

    private void roll(String inputStr, int index, String temp) {
        if (index == inputStr.length()) {
            res.add(temp.toString());
            return;
        }
        Character ch = inputStr.charAt(index);
        String clang = str[ch - '0'];
        for (int i = 0; i < clang.length(); i++) {
            roll(inputStr, index + 1, temp + (clang.charAt(i)));
        }
        return;
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。