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 4f9d949

Browse files
494.目标和增加Go二维dp解法
1 parent dc2edca commit 4f9d949

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
@@ -675,6 +675,57 @@ class Solution:
675675
```
676676

677677
### Go
678+
二维dp
679+
```go
680+
func findTargetSumWays(nums []int, target int) int {
681+
sum := 0
682+
for _, v := range nums {
683+
sum += v
684+
}
685+
if math.Abs(float64(target)) > float64(sum) {
686+
return 0 // 此时没有方案
687+
}
688+
if (target + sum) % 2 == 1 {
689+
return 0 // 此时没有方案
690+
}
691+
bagSize := (target + sum) / 2
692+
693+
dp := make([][]int, len(nums))
694+
for i := range dp {
695+
dp[i] = make([]int, bagSize + 1)
696+
}
697+
698+
// 初始化最上行
699+
if nums[0] <= bagSize {
700+
dp[0][nums[0]] = 1
701+
}
702+
703+
// 初始化最左列,最左列其他数值在递推公式中就完成了赋值
704+
dp[0][0] = 1
705+
706+
var numZero float64
707+
for i := range nums {
708+
if nums[i] == 0 {
709+
numZero++
710+
}
711+
dp[i][0] = int(math.Pow(2, numZero))
712+
}
713+
714+
// 以下遍历顺序行列可以颠倒
715+
for i := 1; i < len(nums); i++ { // 行,遍历物品
716+
for j := 0; j <= bagSize; j++ { // 列,遍历背包
717+
if nums[i] > j {
718+
dp[i][j] = dp[i-1][j]
719+
} else {
720+
dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i]]
721+
}
722+
}
723+
}
724+
return dp[len(nums)-1][bagSize]
725+
}
726+
```
727+
728+
一维dp
678729
```go
679730
func findTargetSumWays(nums []int, target int) int {
680731
sum := 0

0 commit comments

Comments
(0)

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