From b64e34815dc60ba7b0a2450a7bcf7cd723ec0abc Mon Sep 17 00:00:00 2001 From: Henry Du Date: Tue, 12 Oct 2021 18:27:06 -0700 Subject: [PATCH 1/3] =?UTF-8?q?Add=20Go=20into=20337.=E6=89=93=E5=AE=B6?= =?UTF-8?q?=E5=8A=AB=E8=88=8DIII.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0337.打家劫舍III.md | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/problems/0337.打家劫舍III.md b/problems/0337.打家劫舍III.md index 949137c3..8456adf1 100644 --- a/problems/0337.打家劫舍III.md +++ b/problems/0337.打家劫舍III.md @@ -368,6 +368,41 @@ class Solution: return (val1, val2) ``` +Go: + +> 动态规划 + +```go +func rob(root *TreeNode) int { + res := robTree(root) + return max(res[0], res[1]) +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func robTree(cur *TreeNode) []int { + if cur == nil { + return []int{0, 0} + } + // 后序遍历 + left := robTree(cur.Left) + right := robTree(cur.Right) + + // 考虑去偷当前的屋子 + robCur := cur.Val + left[0] + right[0] + // 考虑不去偷当前的屋子 + notRobCur := max(left[0], left[1]) + max(right[0], right[1]) + + // 注意顺序:0:不偷,1:去偷 + return []int{notRobCur, robCur} +} +``` + JavaScript: > 动态规划 From 0d2d732378c4befa2b3ebacb5cd890dcb62981d7 Mon Sep 17 00:00:00 2001 From: Wen Date: Wed, 13 Oct 2021 12:16:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=200416.=E5=88=86?= =?UTF-8?q?=E5=89=B2=E7=AD=89=E5=92=8C=E5=AD=90=E9=9B=86.md=20Go=E8=A7=A3?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0416.分割等和子集.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/problems/0416.分割等和子集.md b/problems/0416.分割等和子集.md index c8a5beea..88852e9d 100644 --- a/problems/0416.分割等和子集.md +++ b/problems/0416.分割等和子集.md @@ -238,6 +238,32 @@ class Solution: return taraget == dp[taraget] ``` Go: +```go +// 分割等和子集 动态规划 +// 时间复杂度O(n^2) 空间复杂度O(n) +func canPartition(nums []int) bool { + sum := 0 + for _, num := range nums { + sum += num + } + // 如果 nums 的总和为奇数则不可能平分成两个子集 + if sum % 2 == 1 { + return false + } + + target := sum / 2 + dp := make([]int, target + 1) + + for _, num := range nums { + for j := target; j >= num; j-- { + if dp[j] < dp[j - num] + num { + dp[j] = dp[j - num] + num + } + } + } + return dp[target] == target +} +``` javaScript: From 7484ba1e003679facc73922ab3d9eb1c909febce Mon Sep 17 00:00:00 2001 From: BarneyShi Date: Tue, 12 Oct 2021 23:06:12 -0700 Subject: [PATCH 3/3] =?UTF-8?q?=E5=89=91=E6=8C=87Offer=2058=20-=20?= =?UTF-8?q?=E4=B8=8D=E4=BD=BF=E7=94=A8=E9=A2=9D=E5=A4=96=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E7=9A=84JS=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../剑指Offer58-II.左旋转字符串.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/problems/剑指Offer58-II.左旋转字符串.md b/problems/剑指Offer58-II.左旋转字符串.md index 29243c6d..60f7115d 100644 --- a/problems/剑指Offer58-II.左旋转字符串.md +++ b/problems/剑指Offer58-II.左旋转字符串.md @@ -200,17 +200,14 @@ func reverse(b []byte, left, right int){ JavaScript: ```javascript -var reverseLeftWords = function (s, n) { - const reverse = (str, left, right) => { - let strArr = str.split(""); - for (; left < right; left++, right--) { - [strArr[left], strArr[right]] = [strArr[right], strArr[left]]; - } - return strArr.join(""); - } - s = reverse(s, 0, n - 1); - s = reverse(s, n, s.length - 1); - return reverse(s, 0, s.length - 1); +var reverseLeftWords = function(s, n) { + const length = s.length; + let i = 0; + while (i < length - n) { + s = s[length - 1] + s; + i++; + } + return s.slice(0, length); }; ```