错误原因
这题的思路在于肯定会有一个组成的组合可以减去剩下组合(sum-组合)得到target,式子x-(sum-x)=target。需判断这个x是否为负值,因为创建的数组为正数。
这里还需要注意如果数组有很多0的情况,这时候需要将组成0的多个情况累加起来,不能直接初始化为1了。
代码实现
func findTargetSumWays(nums []int, target int) int {
sum:=0
for _,v:=range nums{
sum+=v
}
newSum:=(sum+target)/2
if newSum*2!=sum+target{
return 0
}
if newSum<0{
return 0
}
dp:=make([][]int,len(nums))
for i:=0;i<len(dp);i++{
dp[i]=make([]int,newSum+1)
}
dp[0][0]=1
for i:=0;i<=newSum;i++{
if i==nums[0]{
dp[0][i]++
}
}
for i:=1;i<len(dp);i++{
for j:=0;j<=newSum;j++{
if j-nums[i]<0{
dp[i][j]=dp[i-1][j]
}else{
dp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i]]
}
}
}
return dp[len(dp)-1][newSum]
}