【leet-code清晰解题思路💯✅】17. 电话号码的字母组合

180 阅读1分钟

题目描述

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

解题思路

  • 可以dfs遍历,比较基础。
func letterCombinations(digits string) []string {
   if len(digits) == 0 {
      return []string{}
   }
   return getAns(digits, []string{""})
}

var ntos = map[byte][]string{
   '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"},
}

func getAns(s string, strs []string) []string {
   if len(s) == 0 {
      return strs
   }
   nstrs := make([]string, 0)
   for _, str := range strs {
      for _, ss := range ntos[s[0]] {
         nstrs = append(nstrs, str+ss)
      }
   }
   return getAns(s[1:], nstrs)
}

image.png