494. Target Sum LeetCode Solution
In this guide, you will get 494. Target Sum LeetCode Solution with the best time and space complexity. The solution to Target Sum problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Target Sum solution in C++
- Target Sum solution in Java
- Target Sum solution in Python
- Additional Resources

Problem Statement of 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.
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:
1 <= nums.length <= 20
0 <= nums[i] <= 1000
0 <= sum(nums[i]) <= 1000
-1000 <= target <= 1000
Complexity Analysis
- Time Complexity: O(nk), where k = (\Sigma \texttt{nums[i]} + \texttt{target}) / 2
- Space Complexity: O(nk)
494. Target Sum LeetCode Solution in C++
class Solution {
public:
int findTargetSumWays(vector<int>& nums, int target) {
const int sum = accumulate(nums.begin(), nums.end(), 0);
if (sum < abs(target) || (sum + target) % 2 == 1)
return 0;
return knapsack(nums, (sum + target) / 2);
}
private:
int knapsack(const vector<int>& nums, int target) {
const int n = nums.size();
// dp[i][j] := the number of ways to sum to j by nums[0..i)
vector<vector<int>> dp(n + 1, vector<int>(target + 1));
dp[0][0] = 1;
for (int i = 1; i <= n; ++i) {
const int num = nums[i - 1];
for (int j = 0; j <= target; ++j)
if (j < num)
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - num];
}
return dp[n][target];
}
};
/* code provided by PROGIEZ */
494. Target Sum LeetCode Solution in Java
class Solution {
public int findTargetSumWays(int[] nums, int target) {
final int sum = Arrays.stream(nums).sum();
if (sum < Math.abs(target) || (sum + target) % 2 == 1)
return 0;
return knapsack(nums, (sum + target) / 2);
}
private int knapsack(int[] nums, int target) {
final int n = nums.length;
// dp[i][j] := the number of ways to sum to j by nums[0..i)
int[][] dp = new int[n + 1][target + 1];
dp[0][0] = 1;
for (int i = 1; i <= n; ++i) {
final int num = nums[i - 1];
for (int j = 0; j <= target; ++j)
if (j < num)
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - num];
}
return dp[n][target];
}
}
// code provided by PROGIEZ
494. Target Sum LeetCode Solution in Python
class Solution:
def findTargetSumWays(self, nums: list[int], target: int) -> int:
summ = sum(nums)
if summ < abs(target) or (summ + target) % 2 == 1:
return 0
def knapsack(target: int) -> int:
# dp[i] := the number of ways to sum to i by nums so far
dp = [1] + [0] * summ
for num in nums:
for j in range(summ, num - 1, -1):
dp[j] += dp[j - num]
return dp[target]
return knapsack((summ + target) // 2)
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.