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.

For example, if nums = [2, 1], you can add a '+' before 2 and a '-' before 1 and concatenate them to build the expression "+2-1".

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

Input & Output

Example 1 — Basic Case
$ Input: nums = [1,1,1,1,1], target = 3
Output: 5
💡 Note: There are 5 ways to assign symbols: -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 — Simple Case
$ Input: nums = [1], target = 1
Output: 1
💡 Note: Only one way: +1 = 1
Example 3 — Impossible Case
$ Input: nums = [1,2], target = 4
Output: 0
💡 Note: Impossible to reach 4 with numbers [1,2]. Maximum possible is +1+2=3, minimum is -1-2=-3

Constraints

  • 1 ≤ nums.length ≤ 20
  • 0 ≤ nums[i] ≤ 1000
  • 0 ≤ sum(nums[i]) ≤ 1000
  • -1000 ≤ target ≤ 1000

Visualization

Tap to expand
Target Sum Problem INPUT nums array: 1 1 1 1 1 [0] [1] [2] [3] [4] target: 3 Build expressions with + or - before each number +1+1+1+1-1 = 3 +1+1+1-1+1 = 3 ... more ways ALGORITHM STEPS 1 Transform Problem P - N = target P + N = sum P = (sum + target) / 2 2 Calculate P sum = 5, target = 3 P = (5 + 3) / 2 = 4 3 DP Subset Sum Count ways to get sum=4 dp[j] = ways to make sum j dp[0]=1 dp[1]=5 dp[2]=10 dp[3]=10 dp[4]=5 dp[5]=1 dp[j] += dp[j - nums[i]] Answer: dp[4] = 5 4 Return Result dp[P] = number of ways Time: O(n * sum) Space: O(sum) FINAL RESULT 5 valid expressions found: +1 +1 +1 +1 -1 = 3 OK +1 +1 +1 -1 +1 = 3 OK +1 +1 -1 +1 +1 = 3 OK +1 -1 +1 +1 +1 = 3 OK -1 +1 +1 +1 +1 = 3 OK Output: 5 5 different expressions evaluate to target 3 Key Insight: Transform into subset sum: If P = positive subset sum, N = negative subset sum, then P - N = target and P + N = total_sum. Solving: P = (total_sum + target) / 2. Use DP to count subsets summing to P. This reduces 2^n brute force to O(n * sum) dynamic programming solution. TutorialsPoint - Target Sum | Optimal DP Solution
Asked in
Google 15 Facebook 12 Amazon 8 Microsoft 6
95.0K Views
Medium Frequency
~25 min Avg. Time
2.8K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen