• 组合总和 IV


    组合总和 IV

    题目:
    给出一个都是正整数的数组 nums,其中没有重复的数。从中找出所有的和为 target 的组合个数。

    样例
    样例1

    输入: nums = [1, 2, 4] 和 target = 4
    输出: 6
    解释:
    可能的所有组合有:
    [1, 1, 1, 1]
    [1, 1, 2]
    [1, 2, 1]
    [2, 1, 1]
    [2, 2]
    [4]
    样例2

    输入: nums = [1, 2] 和 target = 4
    输出: 5
    解释:
    可能的所有组合有:
    [1, 1, 1, 1]
    [1, 1, 2]
    [1, 2, 1]
    [2, 1, 1]
    [2, 2]
    注意事项
    一个数可以在组合中出现多次。
    数的顺序不同则会被认为是不同的组合。

    解题思路:首先思考当和为target时的方案数 = target - nums[0....n - 1]的方案数之和,现在需要求target - nums[0....n - 1]的方案数,发现这是重复子问题

    public class Solution {
        /**
         * @param nums: an integer array and all positive numbers, no duplicates
         * @param target: An integer
         * @return: An integer
         */
        public int backPackVI(int[] nums, int target) {
            int len = nums.length;
            if(len == 0)
                return 0;
            
            //数组定义:dp[i]表示和为i的方案数
            int dp[] = new int[target + 1];
            
            //初始化
            dp[0] = 1;
    
            /**
             * 状态方程:dp[i] = dp[i] + dp[i - nums[j]]
             **/
            for(int i = 1; i <= target; i++) {
                for(int j = 0; j < len; j++) {
                    if(i >= nums[j]) {
                        dp[i] += dp[i - nums[j]];
                    }
                }
            }
            
            return dp[target];
        }
    }
    
  • 相关阅读:
    2021上半年下午第二题
    21年软件设计师上半年下午试题一
    软考下午第三题-用例图和类图
    类图
    用例图-包含、扩展、泛化
    软考下午题二------数据库设计
    软件设计师下午题-数据流图
    IP练习题
    2020软件工程作业02
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/14042297.html
Copyright © 2020-2023  润新知