github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/algorithm/leetcode/phone-number_test.go (about) 1 package leetcode 2 3 import "testing" 4 5 func TestLetterCombinations(t *testing.T) { 6 res := letterCombinations("213") 7 t.Log(res) 8 } 9 10 // 17. 电话号码的字母组合 11 // https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/ 12 13 func letterCombinations(digits string) []string { 14 if len(digits) == 0 { 15 return nil 16 } 17 letterMap := make(map[rune][]rune) 18 letterMap['2'] = []rune{'a', 'b', 'c'} 19 letterMap['3'] = []rune{'d', 'e', 'f'} 20 letterMap['4'] = []rune{'g', 'h', 'i'} 21 letterMap['5'] = []rune{'j', 'k', 'l'} 22 letterMap['6'] = []rune{'m', 'n', 'o'} 23 letterMap['7'] = []rune{'p', 'q', 'r', 's'} 24 letterMap['8'] = []rune{'t', 'u', 'v'} 25 letterMap['9'] = []rune{'w', 'x', 'y', 'z'} 26 var s []rune 27 var res []string 28 findCombination(0, []rune(digits), letterMap, s, &res) 29 return res 30 } 31 32 func findCombination(index int, text []rune, letterMap map[rune][]rune, s []rune, res *[]string) { 33 if index == len(text) { 34 // 递归的出口就是解 35 *res = append(*res, string(s)) 36 return 37 } 38 arr, ok := letterMap[text[index]] 39 if !ok { 40 // 没有找到就直接继续 41 findCombination(index+1, text, letterMap, s, res) 42 return 43 } 44 for i := range arr { 45 findCombination(index+1, text, letterMap, append(s, arr[i]), res) 46 } 47 }