电话号码的字母组合
电话号码的字母组合
题目描述:
给定一个仅包含数字 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’] 的一个数字。
思路:
map的初体验和使用
还不知道golang里面的map是什么怎么用,上网搜了一下map是哈希表差不读的,有键值对,直接mp:=map[string]string出来的是一个空的没开辟地址的map,要mp:=make(map[string]string)才是开辟好地址的,在下面代码使用的结束时候别忘记加逗号
一道典型的dfs搜索算法,先把一个个字母放进path里面,等i>=len(digits)后就append到结果里面
还学会了自定义函数里面再自定义函数的用法。dfs看着很简洁,递归代码还是不好理解
func letterCombinations(digits string) []string {
if len(digits)==0{
return []string{}
}
mp:=map[string]string{
"2":"abc",
"3":"def",
"4":"ghi",
"5":"jkl",
"6":"mno",
"7":"pqrs",
"8":"tuv",
"9":"wxyz",
}
var dfs func(int,string)
var ans []string
dfs=func(i int,path string){
if i>=len(digits){
ans=append(ans,path)
return
}
for _,v:=range mp[string(digits[i])]{
//第一次写的时候把path+string(v)写在了dfs上一行,结果会不对,回溯的时候回溯会不对
dfs(i+1,path+string(v))
}
}
//这里是dfs进入的入口
dfs(0,"")
return ans
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2 MB, 在所有 Go 提交中击败了93.14%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!