[leetcode] 377.Combination Sum IV

原创 2016年08月30日 11:29:40

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.

Follow up:
What if negative numbers are allowed in the given array?
How does it change the problem?
What limitation we need to add to the question to allow negative numbers?

解题思路:
使用递归的方法做这个题会超时,
因此根据这道题的解法提示选择使用DP的方法,这时我们需要一个一维数组dp大小为target+1,从对应dp[i]存储的是目标i时所得的组合数,然后我们从dp[1]开始计算直到dp[target],每次计算dp[i]时的方法是,从头开始遍历nums数组,如果i>=nums[j], dp[i] = dp[i] + dp[i-nums[j]],
(比如题目中的例子[1,2,3]
计算dp[1] :
从头开始遍历nums
当j =0时 因为1 >= nums[0] 故 dp[1] = dp[1]+dp[1- nums[0]],即
dp[1] = dp[1]+dp[0] = 1;
当j=1 时 因为1 < nums[1] 故 不再运算 故dp[1] = 1;
计算 dp[2]:
当j =0时 因为2 >= nums[0] 故 dp[2] = dp[2]+dp[2- nums[0]],即
dp[2] = dp[2]+dp[1] = 1;
当j =1时 因为2 >= nums[1] 故 dp[2] = dp[2]+dp[2- nums[1]],即
dp[2] = dp[2]+dp[0] = 2;
当j=2 时 因为2 < nums[2] 故 不再运算 故dp[2] = 2;
….
…..
….)

具体代码如下:

public class Solution {
    public int combinationSum4(int[] nums, int target) {
        int result  = 0;

        int[] dp = new int[target+1];
        dp[0] = 1;

        for(int i = 1; i < target + 1; i++) {
            for (int num : nums) {
                if(i >= num){
                    dp[i] = dp[i] + dp[i - num];
                }else{
                    break;
                }
            }
        }

        result = dp[target];
        return result;
    }
}

参考: http://www.cnblogs.com/grandyang/p/5705750.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

[leetcode] 377. Combination Sum IV 解题报告

题目链接: https://leetcode.com/problems/combination-sum-iv/ Given an integer array with all positiv...
  • qq508618087
  • qq508618087
  • 2016年07月29日 14:08
  • 4079

377. Combination Sum IV-动态规划

Given an integer array with all positive numbers and no duplicates, find the number of possible comb...
  • u011567017
  • u011567017
  • 2016年09月22日 19:54
  • 598

【Leetcode】Combination Sum IV

题目链接: https://leetcode.com/problems/combination-sum-iv/ 题目: Given an integer array with a...
  • yeqiuzs
  • yeqiuzs
  • 2016年07月25日 22:43
  • 4114

377. Combination Sum IV

解题思路: 该题对时间有要求,我们使用之前用过的回溯法将会超时。因为回溯法遍历所有种可能,类似于穷举,时间效率肯定不高。 换个思路,我们采用动态规划的思想来看看。 动态规划状态方程: dp[t...
  • JANESTAR
  • JANESTAR
  • 2016年08月09日 15:47
  • 757

leetcode 377. Combination Sum IV 换钱问题

Given an integer array with all positive numbers and no duplicates, find the number of possible comb...
  • Crystal_Zero
  • Crystal_Zero
  • 2017年06月09日 16:48
  • 191

Leetcode 377. Combination Sum IV

题目链接:Combination Sum IV Given an integer array with all positive numbers and no duplicates, find the...
  • xindoo
  • xindoo
  • 2016年07月27日 20:44
  • 777

377. Combination Sum IV

Given an integer array with all positive numbers and no duplicates, find the number of possible comb...
  • wdlsjdl2
  • wdlsjdl2
  • 2016年07月26日 10:43
  • 522

LeetCode—377. Combination Sum IV

Combination Sum IV思路:动态规划。 GitHub地址:https://github.com/corpsepiges/leetcode 目前java版本的答案大约进度是免费的...
  • corpsepiges
  • corpsepiges
  • 2016年07月25日 12:08
  • 1214

【LEETCODE】377- Combination Sum IV [Python]

题目:377 combination sum IV
  • aliceyangxi1987
  • aliceyangxi1987
  • 2016年08月01日 23:37
  • 701

leetcode 377. Combination Sum IV 组合之和 + DP动态规划 + DFS深度优先遍历

Given an integer array with all positive numbers and no duplicates, find the number of possible comb...
  • JackZhang_123
  • JackZhang_123
  • 2017年10月08日 12:19
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode] 377.Combination Sum IV
举报原因:
原因补充:

(最多只允许输入30个字)