添加 0494.目标和(更新版,上一个跑不通了,因为会存在len小于0的情况)Go语言版本

添加 0494.目标和(更新版,上一个跑不通了,因为会存在len小于0的情况)Go语言版本
This commit is contained in:
X-shuffle
2021-09-15 11:20:50 +08:00
committed by GitHub
parent 6cdf24179e
commit cf4cc04fda

View File

@ -314,6 +314,47 @@ func findTargetSumWays(nums []int, target int) int {
return dp[bag]
}
```
> 更新版上一个跑不通了因为会存在len小于0的情况
```go
func findTargetSumWays(nums []int, target int) int {
//先转化为数学问题
//a-b=target
//a+b=sum
//a=(target+sum)/2
//求出sum
var sum int
for _,value:=range nums{
sum+=value
}
//如果sum<target或者 sum+target不是偶数因为a是int 或者两者之和小于0了
if sum<target||(sum+target)%2==1||(sum+target)<0{
return 0
}
//开始dp初始化
dp:=make([][]int,len(nums)+1)
for i:=0;i<=len(nums);i++{
tmp:=make([]int,(target+sum)/2+1)//背包容量
dp[i]=tmp
}
dp[0][0]=1//当背包容量为0且物品为0时填满背包就1种方法
for i:=0;i<len(nums)+1;i++{
if i==0{
continue
}
for j:=0;j<(target+sum)/2+1;j++{
if nums[i-1]<=j{//如果背包装的下
dp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i-1]]
}else{
dp[i][j]=dp[i-1][j]
}
}
}
return dp[len(nums)][(target+sum)/2]
}
```
Javascript
```javascript