Skip to content

Commit 4054d18

Browse files
authored
feat:add LeetCode337 java solution code.
1 parent a4ecfd8 commit 4054d18

File tree

1 file changed

+27
-0
lines changed
  • solution/0300-0399/0337.House Robber III

1 file changed

+27
-0
lines changed

solution/0300-0399/0337.House Robber III/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,33 @@
5555
<!-- 这里可写当前语言的特殊实现逻辑 -->
5656

5757
```java
58+
class Solution {
59+
//这里f(o)表示选择o节点的最大权重和
60+
//这里g(o)表示不选择o节点最大权重和
61+
62+
//f(o) = g(o.left) + g(o.right) 因为选择了o节点,他的两个子节点就不可以选择
63+
//g(0) = Math.max(f(o.left),g(o.left)) + Math.max(f(o.right),g(o.right)) 不选择o节点,他的子节点可选择,也可不选择
64+
Map<TreeNode, Integer> f = new HashMap<>();
65+
Map<TreeNode, Integer> g = new HashMap<>();
66+
67+
public int rob(TreeNode root) {
68+
dfs(root);
69+
return Math.max(f.getOrDefault(root, 0), g.getOrDefault(root, 0));
70+
}
71+
72+
private void dfs(TreeNode root) {
73+
if (root == null) {
74+
return;
75+
}
76+
77+
dfs(root.left);
78+
dfs(root.right);
79+
80+
//选择了root,所以求和的时候要把root.val算进去
81+
f.put(root, root.val + g.getOrDefault(root.left, 0) + g.getOrDefault(root.right, 0));
82+
g.put(root, Math.max(f.getOrDefault(root.left, 0), g.getOrDefault(root.left, 0)) + Math.max(f.getOrDefault(root.right, 0), g.getOrDefault(root.right, 0)));
83+
}
84+
}
5885

5986
```
6087

0 commit comments

Comments
 (0)