给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**使用回溯法1、确定递归函数的参数2、结束条件3、每轮递归干的事*/
class Solution {// 临时路径字符串StringBuilder pathStr = new StringBuilder();// 存放结果集List res = new ArrayList<>();public List letterCombinations(String digits) {// 极端判断if(digits == null || digits.length()== 0){return res;}// 定义一个数组来存放字母String[] numToVal = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};backtacking(digits, numToVal, 0);return res;}// num 是用来标记digits的下标位置的(控制只要num个元素即可)public void backtacking(String digits, String[] numToVal, int num){// 终止条件(由题目可知,我们由几个数组,就要组合成多少个元素)// num控制的是for循环,也就是深度if(digits.length() == num){// 收集结果res.add(pathStr.toString());return;}// 每轮递归需要干的事// 获取我们在按的每个数字(ascii计算的)String str = numToVal[digits.charAt(num) - '0'];// str.length()这个控制的是每一层的宽度 for(int i = 0; ipathStr.append(str.charAt(i));backtacking(digits, numToVal, num + 1);// 回溯pathStr.deleteCharAt(pathStr.length() - 1);}}
}
下一篇:关于感谢班主任的名言名句