给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
看见题目的第一想法,是利用for循环进行嵌套遍历,但很难直接进行嵌套,可以利用回溯来解决。
思路见注释
class Solution { // 存储答案,把这些放类中,而不是放方法里,是为了让代码更简洁点,不需要进行传参。 List<String> list = new ArrayList<>(); // 用数组存储查询更快。 char[][] number = 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.length() == 0) { return list; } add(new StringBuilder(), 0, digits); return list; } public void add(StringBuilder tem, int num, String digits) { // 终止回溯的条件 if (num == digits.length()) { list.add(tem.toString()); return; } // 本次使用到的char数组 // digits.charAt(num) - '2'即对应字符在数组中的下标。 char[] arr = number[digits.charAt(num) - '2']; for (char a : arr) { add(tem.append(a), num + 1, digits); // 需要删除最后一个,如果是String类型,省略这一步(string类型不可改变的特点会自动达到回溯的效果。) tem.deleteCharAt(tem.length() - 1); } } }
标签:digits,---,char,tem,list,力扣,add,num,字母组合 From: https://www.cnblogs.com/allWu/p/17136042.html