377 . Combination Sum IV
Difficulty: Medium
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.
解题思路
最开始以为是贪心,然后发现要全部情况,又想到dfs,但是又有顺序,这就很为难了。最后想到的是对于每一位数字都进行搜索,发现了其中的规律,因为所有数字其实都是可以被之前已经遍历过得数字组合情况组合出来,也即是说,只要考虑上一位数字的组合情况就能推出下一位数字的情况,也即是dp思想。递推公式应当是
values[i]=values[i-nums[0]]+…+values[i-nums[n-1]](n为数组大小)
具体实现
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<int> values(target+1);
values[0]=1;
for(int i=1;i<=target;i++){
for(int j=0;j<nums.size();j++){
int temp=i-nums[j];
if(temp>=0){
values[i]=values[i]+values[temp];
}
}
}
return values[target];
}
};