377. 组合总和 Ⅳ

 

给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。

示例:

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。

/**
       1、由于需要考虑选取元素的顺序,因此这道题需要计算的是选取元素的排列数
       2、dp[x] 表示选取的元素之和等于 x的方案数,目标求dp[target]
       3、dp[0]=1,什么都不选也是一种方案
       4、dp[i] nums 遍历 :选num dp[i-num] (num<=i),不选num dp[i]
    */
    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 num:nums){
                if(num<=i){
                    dp[i]+=dp[i-num];
                }
            }
        }
        return dp[target];
    
    }

  

 

 

 

posted @ 2021-10-16 17:37  sherry001  阅读(18)  评论(0编辑  收藏  举报