Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2bac133

Browse files
Merge pull request youngyangyang04#2727 from markwang1992/494-findTargetSumWays
494.目标和增加Go二维dp解法
2 parents 444cc53 + 4f9d949 commit 2bac133

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

‎problems/0494.目标和.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,57 @@ class Solution:
706706
```
707707

708708
### Go
709+
二维dp
710+
```go
711+
func findTargetSumWays(nums []int, target int) int {
712+
sum := 0
713+
for _, v := range nums {
714+
sum += v
715+
}
716+
if math.Abs(float64(target)) > float64(sum) {
717+
return 0 // 此时没有方案
718+
}
719+
if (target + sum) % 2 == 1 {
720+
return 0 // 此时没有方案
721+
}
722+
bagSize := (target + sum) / 2
723+
724+
dp := make([][]int, len(nums))
725+
for i := range dp {
726+
dp[i] = make([]int, bagSize + 1)
727+
}
728+
729+
// 初始化最上行
730+
if nums[0] <= bagSize {
731+
dp[0][nums[0]] = 1
732+
}
733+
734+
// 初始化最左列,最左列其他数值在递推公式中就完成了赋值
735+
dp[0][0] = 1
736+
737+
var numZero float64
738+
for i := range nums {
739+
if nums[i] == 0 {
740+
numZero++
741+
}
742+
dp[i][0] = int(math.Pow(2, numZero))
743+
}
744+
745+
// 以下遍历顺序行列可以颠倒
746+
for i := 1; i < len(nums); i++ { // 行,遍历物品
747+
for j := 0; j <= bagSize; j++ { // 列,遍历背包
748+
if nums[i] > j {
749+
dp[i][j] = dp[i-1][j]
750+
} else {
751+
dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]]
752+
}
753+
}
754+
}
755+
return dp[len(nums)-1][bagSize]
756+
}
757+
```
758+
759+
一维dp
709760
```go
710761
func findTargetSumWays(nums []int, target int) int {
711762
sum := 0

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /