mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge pull request #2691 from markwang1992/416-canPartition
416.分割等和子集增加Go二维dp解法
This commit is contained in:
@ -453,6 +453,7 @@ class Solution:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Go:
|
### Go:
|
||||||
|
一维dp
|
||||||
```go
|
```go
|
||||||
// 分割等和子集 动态规划
|
// 分割等和子集 动态规划
|
||||||
// 时间复杂度O(n^2) 空间复杂度O(n)
|
// 时间复杂度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:
|
### JavaScript:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
Reference in New Issue
Block a user