力扣 电话号码的字母组合
【摘要】 回溯 递归 力扣
电话号码的字母组合
给定一个仅包含数字 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)