LeetCode(8)组合总和4(中等)

题目描述:

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码;

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 j = 0; j < nums.length; j++){
                if(i >= nums[j]){
                    dp[i] += dp[i - nums[j]];
                }
            }
        }
        return dp[target];
    }

值得注意的是:

DP【i】是目标为i的组合个数

例如dp[5]=dp[1]+dp[4]+dp[2]+dp[3]

但这里会有个问题,假如数组nums中没有2,我们是没法用和为3的组合加上2的,因为这里根本就没有2可选。那我们能选的数字有哪些呢,其实就是数组nums中元素。所以上面的推理我们再来改一下

如果要求dp[i] 我们可以用和为i-nums[0]的组合再加上nums[0] 或者用和为i-nums[1]的组合再加上nums[1] 或者用和为i-nums[2]的组合再加上nums[2]

 

 
posted @ 2021-05-01 11:06  ash98  阅读(54)  评论(0)    收藏  举报