电话号码的字母组合

电话号码的字母组合

题目描述:

给定一个仅包含数字 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 协议 ,转载请注明出处!