mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
添加 0494.目标和(更新版,上一个跑不通了,因为会存在len小于0的情况)Go语言版本
添加 0494.目标和(更新版,上一个跑不通了,因为会存在len小于0的情况)Go语言版本
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user