一、题目【这里写链接内容】
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.
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.
二、分析
该题采用动态规划解决,另dp[i]为当target=i时,数组nums能组成i的个数,可知对于nums中每个元素n,dp[i]中,当i>n时,可以进行选择——dp[i]++,可以不选择——dp[i]=dp[i-n],故能得到代码如下:
三、源代码
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int dp[target + 1];
for(int i = 0; i < target + 1; i ++)
dp[i] = 0;
for(int i =1; i < target + 1; i ++)
{
for(int j = 0; j < nums.size(); j ++)
{
if(i < nums[j])
break;
else if( i == nums[j])
dp[i] ++;
else
dp[i] += dp[i - nums[j]];
}
}
return dp[target];
}
};