您的位置:首页 > 其它

leetcode 377. Combination Sum IV 解题报告

2016-08-04 21:39 323 查看

原题链接

原题链接

解题思路

刚看到题目的我是一脸懵逼的。看题目的标签是动态规划,可见自己的动态规划很弱,需要加强。

首先构造数组dp[i]用来表示target等于i时有多少种类。并且定义dp[0] = 1。

状态转移方程是dp[i] = sum(dp[i - nums[k]]) (k<=i);为什么将dp[0] = 1,就很明显了,因为当一个数字和target相等,此数字只有一种排列。

dp[i - nums[k]]表示,去掉nums[k]时,此时的dp[j]的排列数。这样这个状态转移方程也就明了了。

这样直到求出目标dp[target]。

解题代码

public 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 k : nums) {
if (k <= i)
dp[i] += dp[i - k];
}
}
return dp[target];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 动态规划 dp