(18)Go实现的trie解答leetcode-677
2019-04-24 本文已影响2人
哥斯拉啊啊啊哦
![](https://img.haomeiwen.com/i15203565/db0e5e4e5fdbadb9.jpg)
用数组trie解决
type MapSum struct {
value int
next [26]*MapSum
}
func Constructor() MapSum {
return MapSum{}
}
func (this *MapSum) Insert(key string, val int) {
if len(key) == 0 {
return
}
for _, v := range key {
if this.next[v-97] == nil {
this.next[v-97] = new(MapSum)
}
this = this.next[v-97]
}
this.value = val
}
func (this *MapSum) Sum(prefix string) int {
length := len(prefix)
if length == 0 {
return 0
}
for i := 0; i < length; i++ {
if this = this.next[prefix[i]-97]; this == nil {
return 0
}
}
return this.sumResp()
}
// 求该节点和该节点所有子节点的value的总和
unc (this *MapSum) sumResp() int {
resp := this.value
for i := 0; i < 26; i++ {
if this.next[i] == nil {
continue
}
resp = resp + this.next[i].sumResp()
}
return resp
}
![](https://img.haomeiwen.com/i15203565/f2c4f8c44c3361a4.jpg)
测试通过
相关:
1)trie解决leetcode-207:实现trie
https://www.jianshu.com/p/d95153f382f6
2)trie解决leetcode-211:添加与搜索单词
https://www.jianshu.com/p/74103f51aa36
有bug欢迎指出,转载请注明出处。