日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS)

發(fā)布時間:2024/2/28 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目

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,會破壞后續(xù)節(jié)點Node node = new Node();map[c - 'a'] = node;value[c - 'a'] = val;return node;}public Node set(char c, int val) { // 僅覆蓋value,保留后續(xù)節(jié)點value[c - 'a'] = val;return map[c - 'a'];} }class MapSum {Node node;/*** Initialize your data structure here.*/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) { // 當前字母是prefix的結(jié)尾字母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;} }/*** Your MapSum object will be instantiated and called as such:* MapSum obj = new MapSum();* obj.insert(key,val);* int param_2 = obj.sum(prefix);*/

總結(jié)

以上是生活随笔為你收集整理的leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。