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: Assign + or - to Each Numbernums = [1,1,1,1,1], target = 311111Assign + or - to each numberExample 1-1+1+1+1+1 = 3 ✓Example 2+1-1+1+1+1 = 3 ✓Example 3+1+1-1+1+1 = 3 ✓... and 2 more waysTotal: 5 waysCount all expressions = target
Understanding the Visualization
1
Input
Array of numbers and target sum
2
Process
Try all combinations of + and - signs
3
Output
Count expressions that equal target
Key Takeaway
🎯 Key Insight: Transform +/- assignment into subset sum problem using math: sum(P) = (total + target)/2
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