LeetCode——组合总和 Ⅳ
Posted Shaw_喆宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode——组合总和 Ⅳ相关的知识,希望对你有一定的参考价值。
Q:给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。
示例:
nums = [1, 2, 3]
target = 4
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。
因此输出为 7。
A:
1.回溯法
超时。
private int sum;
public int combinationSum4(int[] nums, int target) {
if (target == 0)
return 1;
if (nums.length == 0)
return 0;
sum = 0;
combination(nums, target);
return sum;
}
private void combination(int[] nums, int target) {
if (target == 0) {
sum++;
return;
}
for (Integer i : nums) {
target -= i;
if (target >= 0)
combination(nums, target);
target += i;
}
}
2.动态规划
完全背包问题,元素可重复,不考虑顺序。
public int combinationSum4(int[] nums, int target) {
if (target == 0)
return 1;
if (nums.length == 0)
return 0;
int[] dp = new int[target + 1];
dp[0] = 1;
for (int i = 1; i <= target; i++) {
for (Integer num : nums) {
if (i - num >= 0) {
dp[i] += dp[i - num];
}
}
}
return dp[target];
}
以上是关于LeetCode——组合总和 Ⅳ的主要内容,如果未能解决你的问题,请参考以下文章