From 2edb4388bcb75d050550e13a3fecaa58d4c9dd5c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 24 Apr 2025 09:24:59 +0800 Subject: [PATCH] Add solution and test-cases for problem 337 --- leetcode/301-400/0337.House-Robber-III/1.jpg | Bin 0 -> 11037 bytes leetcode/301-400/0337.House-Robber-III/2.jpg | Bin 0 -> 13065 bytes .../301-400/0337.House-Robber-III/README.md | 32 ++++++------ .../301-400/0337.House-Robber-III/Solution.go | 49 +++++++++++++++++- .../0337.House-Robber-III/Solution_test.go | 21 +++++--- 5 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 leetcode/301-400/0337.House-Robber-III/1.jpg create mode 100644 leetcode/301-400/0337.House-Robber-III/2.jpg diff --git a/leetcode/301-400/0337.House-Robber-III/1.jpg b/leetcode/301-400/0337.House-Robber-III/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e4081a116f7b5ee50bade5ba9a4bbc36584bcb8 GIT binary patch literal 11037 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 Hhxz{l#zwAF literal 0 HcmV?d00001 diff --git a/leetcode/301-400/0337.House-Robber-III/README.md b/leetcode/301-400/0337.House-Robber-III/README.md index 3c918ffdc..397634a52 100644 --- a/leetcode/301-400/0337.House-Robber-III/README.md +++ b/leetcode/301-400/0337.House-Robber-III/README.md @@ -1,28 +1,30 @@ # [337.House Robber III][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +The thief has found himself a new place for his thievery again. There is only one entrance to this area, called `root`. -**Example 1:** +Besides the `root`, each house has one and only one parent house. After a tour, the smart thief realized that all houses in this place form a binary tree. It will automatically contact the police if **two directly-linked houses were broken into on the same night**. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Given the `root` of the binary tree, return the maximum amount of money the thief can rob **without alerting the police**. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.jpg) -### 思路1 -> ... -House Robber III -```go +``` +Input: root = [3,2,3,null,3,null,1] +Output: 7 +Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7. ``` +**Example 2:** + +![2](./2.jpg) +``` +Input: root = [3,4,5,1,3,null,1] +Output: 9 +Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9. +``` ## 结语 diff --git a/leetcode/301-400/0337.House-Robber-III/Solution.go b/leetcode/301-400/0337.House-Robber-III/Solution.go index d115ccf5e..dea53ffac 100644 --- a/leetcode/301-400/0337.House-Robber-III/Solution.go +++ b/leetcode/301-400/0337.House-Robber-III/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + cache := make(map[*TreeNode][2]int) + var dfs func(*TreeNode, bool) int + dfs = func(tree *TreeNode, selectedParent bool) int { + if tree == nil { + return 0 + } + if selectedParent { + v, ok := cache[tree] + if ok { + if v[0] != -1 { + return v[0] + } + } + left := dfs(tree.Left, false) + right := dfs(tree.Right, false) + if !ok { + v = [2]int{left + right, -1} + } else { + v[0] = left + right + } + cache[tree] = v + return v[0] + } + v, ok := cache[tree] + if !ok { + v = [2]int{-1, -1} + } + if v[0] == -1 { + left := dfs(tree.Left, false) + right := dfs(tree.Right, false) + v[0] = left + right + } + if v[1] == -1 { + left1 := dfs(tree.Left, true) + right1 := dfs(tree.Right, true) + v[1] = left1 + right1 + tree.Val + } + cache[tree] = v + return max(v[0], v[1]) + } + return dfs(root, false) } diff --git a/leetcode/301-400/0337.House-Robber-III/Solution_test.go b/leetcode/301-400/0337.House-Robber-III/Solution_test.go index 14ff50eb4..2f466c2c2 100644 --- a/leetcode/301-400/0337.House-Robber-III/Solution_test.go +++ b/leetcode/301-400/0337.House-Robber-III/Solution_test.go @@ -10,12 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2, Right: &TreeNode{Val: 3}}, + Right: &TreeNode{Val: 3, Right: &TreeNode{Val: 1}}, + }, 7}, + {"TestCase2", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 4, Left: &TreeNode{Val: 1}, Right: &TreeNode{Val: 3}}, + Right: &TreeNode{Val: 5, Right: &TreeNode{Val: 1}}, + }, 9}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }