題目
https://leetcode.com/problems/map-sum-pairs/
題解
基于前綴樹實現(xiàn),可以參考:leetcode 208. Implement Trie (Prefix Tree) | 208. 實現(xiàn) Trie 前綴樹(Java) 中的數(shù)據(jù)結(jié)構(gòu),然后加以改造即可。
上代碼。其中,insert() 函數(shù)的四個分類 存在 不存在 末尾 非末尾 是需要注意的細節(jié)。
class Node {Node[] map
;int[] value
;public Node() {this.map
= new Node['z' - 'a' + 1];this.value
= new int['z' - 'a' + 1];}public Node getNode(char c
) {return map
[c
- 'a'];}public int getValue(char c
) {return value
[c
- 'a'];}public Node put(char c
, int val
) { Node node
= new Node();map
[c
- 'a'] = node
;value
[c
- 'a'] = val
;return node
;}public Node set(char c
, int val
) { value
[c
- 'a'] = val
;return map
[c
- 'a'];}
}class MapSum {Node node
;public MapSum() {node
= new Node();}public void insert(String key
, int val
) {Node cur
= node
;for (int i
= 0; i
< key
.length(); i
++) {if (cur
.getNode(key
.charAt(i
)) != null) { if (i
== key
.length() - 1) { cur
= cur
.set(key
.charAt(i
), val
);} else { cur
= cur
.getNode(key
.charAt(i
));}} else { if (i
== key
.length() - 1) { cur
= cur
.put(key
.charAt(i
), val
);} else { cur
= cur
.put(key
.charAt(i
), 0);}}}}public int sum(String prefix
) {Node cur
= node
;int sum
= 0;for (int i
= 0; i
< prefix
.length(); i
++) {if (cur
.getNode(prefix
.charAt(i
)) == null) { return 0;} else {if (i
== prefix
.length() - 1) { sum
= cur
.getValue(prefix
.charAt(i
));}cur
= cur
.getNode(prefix
.charAt(i
));}}return dfs(cur
, sum
);}public int dfs(Node node
, int sum
) {for (int i
= 0; i
< node
.map
.length
; i
++) {if (node
.map
[i
] != null) {sum
+= node
.value
[i
];sum
= dfs(node
.map
[i
], sum
);}}return sum
;}
}
總結(jié)
以上是生活随笔為你收集整理的leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。