博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 377. Combination Sum IV
阅读量:5303 次
发布时间:2019-06-14

本文共 2247 字,大约阅读时间需要 7 分钟。

377. Combination Sum IV

  • Total Accepted: 2547
  • Total Submissions: 6581
  • Difficulty: Medium

 

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 = 4The 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?

 

 

思路:DP,可以自顶向下,也可以自底向上。

假设values[i]表示的是i的被组合情况,显然有values[i]=values[i-nums[0]]+...+values[i-nums[n-1]](n=nums.size())。

注意冗余遍历的存在,例如下面的代码就没有去除冗余的遍历:

1 class Solution { 2 public: 3     int combinationSum4(vector
& nums, int target) { 4 if(target<=0){ 5 return !target; 6 } 7 int i,n=nums.size(),res=0; 8 for(i=0;i

所以可以先申请内存,记录已经计算过的数的情况。

 

 

代码:

自底向上:

1 class Solution { 2 public: 3     int combinationSum4(vector
& nums, int target) { 4 //局部域参数申请,未初始化时,可能不为0 5 //例如 6 //int *values=new int[target]; 7 //此时values数组的每个数的取值为任意值! 8 vector
values(target+1); 9 values[0]=1;10 for(int i=1;i<=target;i++){11 for(int j=0;j
=0){14 values[i]=values[i]+values[temp];15 }16 }17 }18 return values[target];19 }20 };

 

 

自顶向下:

values初始化为0不合适,因为values[i]==0可以意味着i不能被所给数组成,此时i已经被遍历过;也可以意味着i没有被遍历。所以设置values的初始值为0,还是不能避免大量重复的遍历操作。

1 class Solution { 2 public: 3     int combinationSum4(vector
nums,vector
& values,int target) { 4 if(target<=0){ 5 return !target; 6 } 7 if(values[target]==-1){ 8 values[target]=0; 9 for(int i=0;i
& nums, int target) {16 //values初始化为0不合适,因为values[i]==0可以意味着i不能被所给数组成,此时i已经被遍历过17 //也可以意味着i没有被遍历18 //所以设置values的初始值为0,还是不能避免大量重复的遍历操作19 vector
values(target+1,-1);20 return combinationSum4(nums,values,target);21 }22 };

 

转载于:https://www.cnblogs.com/Deribs4/p/5719474.html

你可能感兴趣的文章
shell编程while
查看>>
java 连接mysql
查看>>
spring 收藏博文
查看>>
Redis 编译报错 "make[3]: gcc:命令未找到" 解决实例
查看>>
容斥原理——hdu2841
查看>>
C#设计模式(19)——状态者模式(State Pattern)
查看>>
JAVA 线程池之Callable返回结果
查看>>
Navisworks 2014 Api 简单的使用
查看>>
Java Spring IOC用法
查看>>
解决ie6下不支持fix属性,模拟固定定位
查看>>
面向对象之类的其他方法
查看>>
Java NIO简介 2011-09-20 12:43 94人阅读 评论(0) 收藏...
查看>>
ubuntu虚拟内存一直保留
查看>>
ubuntu使用virualbox安装mac10.12
查看>>
git push -u origin master error: failed to push some refs to
查看>>
服务器端渲染SSR
查看>>
sql之left join、right join、inner join的区别
查看>>
垂直居中及容器内图片垂直居中的CSS解决方法
查看>>
字符编码笔记:ASCII,Unicode 和 UTF-8
查看>>
java枚举类型enum的使用
查看>>