2021-09-16:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。按键2对应:'a', 'b', 'c'。按键3对应:'d', 'e', 'f'。按键4对应:'g', 'h', 'i'。按键5对应:'j', 'k', 'l'。按键6对应:'m', 'n', 'o'。按键7对应:'p', 'q', 'r', 's'。按键8对应:'t', 'u', 'v'。按键9对应:'w', 'x', 'y', 'z'。示例 1:输入:digits = "23",输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]。示例 2:输入:digits = "",输出:[]。示例 3:输入:digits = "2",输出:["a","b","c"]。
福大大 答案2021-09-16:
自然智慧。递归。
代码用golang编写。代码如下:
package main import "fmt" func main() { digits := "23" ret := letterCombinations(digits) fmt.Println(ret) } var phone = [][]byte{ {'a', 'b', 'c'}, // 2 0 {'d', 'e', 'f'}, // 3 1 {'g', 'h', 'i'}, // 4 2 {'j', 'k', 'l'}, // 5 3 {'m', 'n', 'o'}, // 6 {'p', 'q', 'r', 's'}, // 7 {'t', 'u', 'v'}, // 8 {'w', 'x', 'y', 'z'}, // 9 } // "23" func letterCombinations(digits string) []string { ans := make([]string, 0) if len(digits) == 0 { return ans } str := []byte(digits) path := make([]byte, len(str)) process(str, 0, &path, &ans) return ans } func process(str []byte, index int, path *[]byte, ans *[]string) { if index == len(str) { *ans = append(*ans, string(*path)) } else { cands := phone[str[index]-'2'] for _, cur := range cands { (*path)[index] = cur process(str, index+1, path, ans) } } }
执行结果如下: