• 力扣算法:组合总和IV


    原题链接:https://leetcode-cn.com/problems/combination-sum-iv

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

    示例:

    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。

    解题思路:

    本来计划使用回溯的方式,求出结果之后再求长度即可,但是这样会超时。

    源码:

    public int combinationSum4(int[] nums, int target) {
            List<Integer> result=new ArrayList<>();
            result.add(0);
            backtrack(result,nums,target,0);
            return result.get(0);
    
        }
        public void backtrack(List<Integer> result,int[] nums, int target,int sum  ) {
    
            if (sum == target) {
                int num=result.get(0);
                result.remove(0);
                result.add(num+1);
                return;
            }
            if (sum > target) {
                return;
            }
    
            for (int i = 0; i < nums.length; i++) {
                if (sum + nums[i] <= target) {
                    backtrack( result,nums, target,  sum + nums[i]);
                }
    
            }
        }

    所以只能使用动态规划来完成了。

    声明dp数组,dp[i]  表示和为i 的时候有多少种情况。

    动态变化为

    dp[i] = dp[i]+dp[i-num]   (i-num 要>=0)

    public int combinationSum4(int[] nums, int target) {
            int[] dp = new int[target+1];
            for(int i=0;i<dp.length;i++)
                dp[i]=0;
            dp[0]=1;
            for(int i=1;i<=target;i++){
                for(int num:nums){
                    if(i-num>=0){
                        dp[i]=dp[i]+dp[i-num];
                    }
                }
            }
    
    
            return dp[target] ;
    
        }
  • 相关阅读:
    C语言之逻辑运算符
    iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView
    Mac 环境下svn服务器的配置
    ld: warning: directory not found for option 去掉警告的方法
    Mac怎么设置wifi热点
    如何获取AppStore软件安装包的路径
    四种卸载Mac软件的方法
    UIAlertController
    uiview关联xib
    OC学习篇之---文件的操作
  • 原文地址:https://www.cnblogs.com/wys-373/p/13702466.html
Copyright © 2020-2023  润新知