From 9b793937638a23bc69968c8e93816ee682712ca0 Mon Sep 17 00:00:00 2001 From: Wen Date: Tue, 26 Oct 2021 22:05:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=200337.=E6=89=93=E5=AE=B6?= =?UTF-8?q?=E5=8A=AB=E8=88=8DIII.md=20Go=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0337.打家劫舍III.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/problems/0337.打家劫舍III.md b/problems/0337.打家劫舍III.md index dfb8ba57..541c1163 100644 --- a/problems/0337.打家劫舍III.md +++ b/problems/0337.打家劫舍III.md @@ -395,6 +395,35 @@ const rob = root => { }; ``` +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 +} +```