# 494-target-sum Try it on leetcode ## Description

You are given an integer array nums and an integer target.

You want to build an expression out of nums by adding one of the symbols '+' and '-' before each integer in nums and then concatenate all the integers.

Return the number of different expressions that you can build, which evaluates to target.

 

Example 1:

Input: nums = [1,1,1,1,1], target = 3
Output: 5
Explanation: There are 5 ways to assign symbols to make the sum of nums be target 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
+1 + 1 + 1 + 1 - 1 = 3

Example 2:

Input: nums = [1], target = 1
Output: 1

 

Constraints:

## Solution(Python) ```Python class Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: self.nums = nums self.target = target return self.topdown() # Time Complexity: O(2^n) # Space Complexity: O(n) def bruteforce(self, nums: List[int], target: int) -> int: cnt = 0 n = len(nums) def calculate(i, sumsofar): nonlocal cnt if i == n: if sumsofar == target: cnt += 1 else: calculate(i + 1, sumsofar + nums[i]) calculate(i + 1, sumsofar - nums[i]) calculate(0, 0) return cnt # Time Complexity: O(n*sum) # Space Complexity: O(n*sum) @cache def topdown(self, index: int = 0, sumsofar: int = 0) -> int: if index == len(self.nums): return sumsofar == self.target else: add = self.topdown(index + 1, sumsofar + self.nums[index]) sub = self.topdown(index + 1, sumsofar - self.nums[index]) return add + sub ```