zoukankan      html  css  js  c++  java
  • 377. Combination Sum IV

    Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.

    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?

    题目含义:给定多个正整数且没有重复,从中挑选任意个数字(可以重复)使其加起来等于给定目标值target

    思路:

     dp[i]表示总和为i的情况数,假设当前整数值等于n(n<i),如果我们知道了 dp[i-n] 的情况数,因为 dp[i-n] 的每一种情况加n都等于dp[i],所以说dp[i-n]和dp[i]的情况数相同。
     每获取一个整数n,都会给了dp[i]添加dp[i-n]种情况,所以公式为dp[i] = dp[i] + dp[i-n]

    例如:
     当前元素n等于1时,dp[9] = dp[9] + dp[9-1]
              dp[8] = dp[8] + dp[8-1]
               ...
              dp[1] = dp[1] + dp[1-1]
     当前元素n等于2时,dp[9] = dp[9] + dp[9-2]
                 dp[8] = dp[8] + dp[8-2]
               ...
                 dp[2] = dp[2] + dp[2-2]
     当前元素n等于3时,dp[9] = dp[9] + dp[9-3]
                 dp[8] = dp[8] + dp[8-3]
               ...
                 dp[3] = dp[3] + dp[3-3]

     1     public int combinationSum4(int[] nums, int target) {                  
     2         int[] dp=new int[target+1];
     3         dp[0]=1;
     4         for(int i=1;i<=target;i++)
     5         {
     6             for (int num:nums)
     7             {
     8                 if(i>=num) dp[i]=dp[i]+dp[i-num];
     9             }
    10         }
    11         return dp[target];
    12     }

     类似题目: 494. Target Sum

    请注意:本题目选取的数字可以多次重复,而题目494中的数字不可重复选择

  • 相关阅读:
    维护gcd的线段树 补发一波。。。
    BZOJ 4720: [Noip2016]换教室
    P2184 贪婪大陆 树状数组
    BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
    POJ3280 Cheapest Palindrome 区间DP
    BZOJ 2288: 【POJ Challenge】生日礼物 堆&&链表
    BZOJ 4236: JOIOJI map瞎搞
    浅谈最近公共祖先(LCA)
    题解 BZOJ 1912 && luogu P3629 [APIO2010]巡逻 (树的直径)
    [笔记] 求树的直径
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7694733.html
Copyright © 2011-2022 走看看