File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff 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
679730func findTargetSumWays (nums []int , target int ) int {
680731 sum := 0
You can’t perform that action at this time.
0 commit comments