赞
踩
给定一个仅包含数字 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']
的一个数字。
func letterCombinations(digits string) []string { // 定义数字对应的字母映射表 m := []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"} // 初始化结果切片和当前路径切片 res, path := make([]string, 0), make([]byte, 0) // 如果输入的数字字符串为空,则直接返回空结果切片 if digits == "" { return res } // 定义深度优先搜索函数 var dfs func(digits string, pos int) dfs = func(digits string, pos int) { // 如果当前位置已经遍历到数字字符串的末尾 if pos == len(digits) { // 将当前路径切片转换为字符串,并添加到结果切片中 tmp := string(path) res = append(res, tmp) return } // 获取当前位置对应的数字,并获取其对应的字母字符串 digit := int(digits[pos] - '0') str := m[digit-2] // 遍历当前数字对应的字母字符串中的每个字母 for i := 0; i < len(str); i++ { // 将当前字母添加到路径切片中,并继续深度优先搜索下一个位置的数字 path = append(path, str[i]) dfs(digits, pos+1) // 回溯,将当前字母从路径切片中移除 path = path[:len(path)-1] } } // 从第一个位置开始进行深度优先搜索 dfs(digits, 0) // 返回结果切片 return res }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。