https://leetcode.com/problems/combination-sum-iv/description/
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?
解题思路:
dp[i]表示和为i的总的可能性
状态转移方程:
dp[i] += dp[i-nums[k]] if(i>nums[k])
+= 1 if(i==nums[k])
public class Combination_Sum_IV {
/**
* dp[target]=sum(dp[target-nums[i]])for(i=0;i<nums.length;i++)
*
* @param nums
* @param target
* @return
*/
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target+1];
for(int i=0;i<=target;i++){
for(int k=0;k<nums.length;k++){
if(i-nums[k]>0){
dp[i] += dp[i-nums[k]];
}else if(i-nums[k]==0){
dp[i] += 1;
}
}
}
return dp[target];
}
public static void main(String[] args) {
new Combination_Sum_IV().combinationSum4(new int[]{1,2,3}, 4);
}
}