Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情
题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
AC Code
func letterCombinations(digits string) []string {
var m = map[byte][]byte{
'2': {'a', 'b', 'c'},
'3': {'d', 'e', 'f'},
'4': {'h', 'i', 'g'},
'5': {'k', 'l', 'j'},
'6': {'m', 'n', 'o'},
'7': {'p', 'q', 'r', 's'},
'8': {'t', 'u', 'v'},
'9': {'w', 'x', 'y', 'z'},
}
(1) ans := make([]string,0)
n := len(digits)
if n==0 {
return ans
}
(2) var dfs func(k int, res []byte)
(3) dfs = func(k int,res []byte){
if k == n {
(4) ans = append(ans,string(res))
return
}
for i:=0; i<len(m[digits[k]]); i++ {
(5) res = append(res,m[digits[k]][i])
(6) dfs(k+1,res)
(7) res = res[:len(res)-1]
}
}
(8) dfs(0,[]byte{})
return ans
}
- (1) 开创一个数组来存元素
- (2) 定义一个函数来进行递归
- (3) 传入是元素个数和暂存的数组
- (4) 如果这个传入的元组个数k等于n的话,就表示已经有了一种结果了,所以就可以保存这个答案。
- (5) digits[k] 就是输入的“23”中的每个元素,然后对这个进行 m[digits[k]] 就知道这是啥了。
- (6) 然后这个就是一个操作了,不断进行下一步的操作,递归进行
- (7) 最后要回溯,把最后一个删除,那么这次dfs就结束了
- (8) 输入函数,初始值是0,然后传入空的byte类型的切片