class Solution:
def __init__(self):
self.res = 0
def findTargetSumWays(self, nums: List[int], target: int) -> int:
post_sum = [0] * (len(nums)+1)
for i in reversed(range(len(nums))):
post_sum[i] = post_sum[i+1] + nums[i]
self.dfs(target,nums,idx=0,tmp=[],post_sum=post_sum)
return self.res
def dfs(self,target,nums,idx,tmp,post_sum):
if sum(tmp) - post_sum[idx] > target:
return
if sum(tmp) + post_sum[idx] < target:
return
if idx==len(nums) :
if sum(tmp) == target:
self.res += 1
return
tmp.append(nums[idx])
self.dfs(target,nums,idx+1,tmp,post_sum)
tmp.pop()
tmp.append(-nums[idx])
self.dfs(target,nums,idx+1,tmp,post_sum)
tmp.pop()
'''
[16,40,9,17,49,32,30,10,38,36,31,22,3,36,32,2,26,17,30,47]
49
'''