电话号码的字母组合

电话号码的字母组合

​ 给定一个仅包含数字 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'] 的一个数字。

题解

经典的回溯的思想,没什么特别的地方

java 复制代码
class Solution {
    List<String> ans = new ArrayList<String>();
    Map<Character, String> phoneMap = new HashMap<Character, String>() {
        {
            put('2', "abc");
            put('3', "def");
            put('4', "ghi");
            put('5', "jkl");
            put('6', "mno");
            put('7', "pqrs");
            put('8', "tuv");
            put('9', "wxyz");
        }
    };

    public List<String> letterCombinations(String digits) {
        if(digits.length() == 0){
            return ans;
        }
        StringBuffer str = new StringBuffer();
        letterCombinations(digits, 0, str);
        return ans;
    }

    private void letterCombinations(String digits, int index, StringBuffer str) {
        if (index == digits.length()) {
            ans.add(str.toString());
            return;
        }
        String phone = phoneMap.get(digits.charAt(index));
        for (int i = 0; i < phone.length(); i++) {
            str.append(phone.charAt(i));
            letterCombinations(digits, index + 1, str);
            str.deleteCharAt(str.length() - 1);
        }
    }
}
go 复制代码
var phoneMap = map[byte]string{
	'2': "abc",
	'3': "def",
	'4': "ghi",
	'5': "jkl",
	'6': "mno",
	'7': "pqrs",
	'8': "tuv",
	'9': "wxyz",
}

func letterCombinations(digits string) []string {
    var ans []string = []string{}
	if len(digits) == 0 {
		return ans
	}
	letterCombinationsHelper(digits, 0, "", &ans)
	return ans
}

func letterCombinationsHelper(digits string, index int, str string, ans *[]string) {
	if index == len(digits) {
		*ans = append(*ans, str)
		return
	}
	phone := phoneMap[digits[index]]
	for i := 0; i < len(phone); i++ {
		str += string(phone[i])
		letterCombinationsHelper(digits, index+1, str, ans)
		str = str[:len(str)-1]
	}
}
相关推荐
AlexMercer101215 分钟前
[C++ 核心编程]笔记 4.2.6 初始化列表
开发语言·数据结构·c++·笔记·算法
夜雨翦春韭1 小时前
【代码随想录Day54】图论Part06
java·开发语言·数据结构·算法·leetcode·图论
TimberWill2 小时前
双指针-01-三数之和
数据结构·算法·leetcode
七月巫山晴3 小时前
QChart中柱形图的简单使用并实现【Qt】
开发语言·数据结构·c++·qt·算法·排序算法
一个不喜欢and不会代码的码农3 小时前
力扣1381:设计一个支持增量操作的栈
数据结构·算法·leetcode
今天秃头了吗??4 小时前
贪心算法入门(一)
java·数据结构·算法·贪心算法
nuomigege4 小时前
普通变量和数组在大小端模式下的存储顺序考证
数据结构
ChoSeitaku5 小时前
链表|反转链表|移除链表元素|链表的中间节点|返回倒数第k个节点|合并两个有序链表(C)
c语言·数据结构·链表
夜雨翦春韭5 小时前
【代码随想录Day58】图论Part09
java·开发语言·数据结构·算法·leetcode·图论