Go语言力扣刷题-电话号码的字母组合|Go主题月
17. 电话号码的字母组合
一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
使用Go解决该问题涉及知识包括:
Go中map的初始化与使用
map可以使用make或者常量来初始化:
1
2
3
4
5
6
7a := make(map[string]string)
a["key"] = "value"
fmt.Println(a)
b := map[string]string {
"keyb": "valueb",
}
fmt.Println(b)for 循环控制
用习惯for-range后,真的比 for-i简洁好看好多。不仅可以遍历数组,切片,也可以遍历map,字符串。不需要某个参数时,可以将以
_
代替。对于数组而言: 第一个参数表示索引,第二参数表示取值。对于map而言:第一个参数表示键,第二参数表示取值。
1
2
3for _, letter := range letters {
// loop
}append 切片添加元素
append可以向切片添加元素,并返回修改后的切片。
1
2slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)Go的指针:
这是我第一次使用Go的指针,按照C语言的方式使用,大概也就按照**&取地址,*取值**来操作。不多阐述。
回到题目上,这个题目个人认为官方将其复杂化了,或许是为了覆盖回溯算法这一考点吧。
算法1:三层循环,逐个追加。
其中的初始化 result := []string{""}
是我非常骄傲的一行代码 ^_^
1 | func letterCombinations(digits string) []string { |
算法2: 回溯(递归)。借鉴了官方的算法逻辑。
1 | func letterCombinations(digits string) []string { |
使用Go刷了力扣17道题目,Go的基础知识了解的差不多了,但是完整的Go逻辑却还没有建立,因此想看一点Go书籍,把知识串起来,后续大概会发一下阅读笔记之类的。