Merge pull request #2691 from markwang1992/416-canPartition

416.分割等和子集增加Go二维dp解法
This commit is contained in:
程序员Carl
2024-08-27 10:23:54 +08:00
committed by GitHub

View File

@ -453,6 +453,7 @@ class Solution:
```
### Go
一维dp
```go
// 分割等和子集 动态规划
// 时间复杂度O(n^2) 空间复杂度O(n)
@ -480,6 +481,44 @@ func canPartition(nums []int) bool {
}
```
二维dp
```go
func canPartition(nums []int) bool {
sum := 0
for _, val := range nums {
sum += val
}
if sum % 2 == 1 {
return false
}
target := sum / 2
dp := make([][]int, len(nums))
for i := range dp {
dp[i] = make([]int, target + 1)
}
for j := nums[0]; j <= target; j++ {
dp[0][j] = nums[0]
}
for i := 1; i < len(nums); i++ {
for j := 0; j <= target; j++ {
if j < nums[i] {
dp[i][j] = dp[i-1][j]
} else {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-nums[i]] + nums[i])
}
}
}
return dp[len(nums)-1][target] == target
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
```
### JavaScript:
```js