494. 目标和 golang 动态规划
生活随笔
收集整理的這篇文章主要介紹了
494. 目标和 golang 动态规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
494. 目標和
給定一個非負整數數組,a1, a2, …, an, 和一個目標數,S?,F在你有兩個符號 + 和 -。對于數組中的任意一個整數,你都可以從 + 或 -中選擇一個符號添加在前面。
返回可以使最終數組和為目標數 S 的所有添加符號的方法數。
示例 1:
輸入: nums: [1, 1, 1, 1, 1], S: 3
輸出: 5
解釋:
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
一共有5種方法讓最終目標和為3。
注意:
數組非空,且長度不會超過20。
初始的數組的和不會超過1000。
保證返回的最終結果能被32位整數存下。
code
func findTargetSumWays(nums []int, S int) int {if len(nums)==0 || nums==nil{return 0}sum:=0for i:=0;i<len(nums);i++{sum+=nums[i]}// 1.恒不成立條件1if sum < S{return 0}// 2.恒不成立條件2sum+=Sif sum%2!=0{return 0}dp:=make([]int,sum/2+1)dp[0]=1// 因此只要找到一個子集,令它們都取正號,并且和等于 (target + sum(nums))/2,就證明存在解for i:=0;i<len(nums);i++{for j:=sum/2;j>=nums[i];j--{dp[j]=dp[j]+dp[j-nums[i]]}}return dp[sum/2] } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的494. 目标和 golang 动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 治疗不孕不育排名
- 下一篇: 1360. 日期之间隔几天 golang