题目分析
定一个无重复的正整数数组,计算得到一个目标正整数的所有组合方式的个数。
解题思路
利用动态规划进行求解,其初始值dp[0] = 1;动态规划转移方程为dp[i] += dp[i - num[j]],其中dp[i]表示生成数字i的所有可能的组合方式的个数。
C++实现
int combinationSum4(vector<int>& nums, int target)
{
vector<int> dp(target + 1, 0);
dp[0] = 1;
for (int i = 1; i <= target; i++)
{
for (int j = 0; j < nums.size(); j++)
{
if (i >= nums[j])
dp[i] += dp[i - nums[j]];
}
}
return dp[target];
}