update 0337.打家劫舍III:删除冗余代码

This commit is contained in:
Yuhao Ju
2022-12-24 17:54:59 +08:00
committed by GitHub
parent e39209e3d7
commit a9034c4910

View File

@ -129,7 +129,7 @@ if (cur == NULL) return vector<int>{0, 0};
3. 确定遍历顺序
首先明确的是使用后序遍历。 因为通过递归函数的返回值来做下一步计算。
首先明确的是使用后序遍历。 因为通过递归函数的返回值来做下一步计算。
通过递归左节点,得到左节点偷与不偷的金钱。
@ -147,7 +147,7 @@ vector<int> right = robTree(cur->right); // 右
4. 确定单层递归的逻辑
如果是偷当前节点那么左右孩子就不能偷val1 = cur->val + left[0] + right[0]; **如果对下标含义不理解就回顾一下dp数组的含义**
如果是偷当前节点那么左右孩子就不能偷val1 = cur->val + left[0] + right[0]; **如果对下标含义不理解就回顾一下dp数组的含义**
如果不偷当前节点那么左右孩子就可以偷至于到底偷不偷一定是选一个最大的所以val2 = max(left[0], left[1]) + max(right[0], right[1]);
@ -483,37 +483,6 @@ function robNode(node: TreeNode | null): MaxValueArr {
}
```
### Go
```go
// 打家劫舍Ⅲ 动态规划
// 时间复杂度O(n) 空间复杂度O(logn)
func rob(root *TreeNode) int {
dp := traversal(root)
return max(dp[0], dp[1])
}
func traversal(cur *TreeNode) []int {
if cur == nil {
return []int{0, 0}
}
dpL := traversal(cur.Left)
dpR := traversal(cur.Right)
val1 := cur.Val + dpL[0] + dpR[0] // 偷盗当前节点
val2 := max(dpL[0], dpL[1]) + max(dpR[0], dpR[1]) // 不偷盗当前节点
return []int{val2, val1}
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
```
<p align="center">