Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.
Example:
nums = [1, 2, 3]
target = 4
The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
Note that different sequences are counted as different combinations.
Therefore the output is 7.
Follow up:
- What if negative numbers are allowed in the given array?
- How does it change the problem?
- What limitation we need to add to the question to allow negative numbers?
-
Method 1: Search dfs TLE
class Solution { private int res = 0; public int combinationSum4(int[] nums, int target) { dfs(nums, target, 0); return res; } private void dfs(int[] nums, int target, int temp){ if(temp == target) res++; else if(temp < target){ for(int i = 0; i < nums.length; i++){ dfs(nums, target, temp + nums[i]); } } } }
-
Method 1:DP AC 87.93%
class Solution { public int combinationSum4(int[] nums, int target) { int[] dp = new int[target + 1]; dp[0] = 1; for(int i = 1; i <= target; i++){ for(int num : nums){ dp[i] += i - num >= 0 ? dp[i - num]: 0; } } return dp[target]; } }