101 Logo
onenoughtone

Problem Statement

Target Sum

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.

Examples

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
Explanation: There is 1 way to assign symbols to make the sum of nums be target 1. +1 = 1

Constraints

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

Problem Breakdown

To solve this problem, we need to:

  1. This problem can be solved using dynamic programming or recursion with memoization.
  2. We can transform this problem into a subset sum problem by observing that we're essentially partitioning the array into two subsets: one with '+' signs and one with '-' signs.
  3. If we denote the sum of the '+' subset as P and the sum of the '-' subset as N, then we have P + N = sum(nums) and P - N = target.
  4. Solving these equations, we get P = (sum(nums) + target) / 2, which means we need to find the number of subsets with sum P.
ProblemSolutionCode
101 Logo
onenoughtone