leetcode-377. Combination Sum IV
来源:互联网 发布:网站源码建站 编辑:程序博客网 时间:2024/04/27 22:13
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.
源码:
class Solution {public:int combinationSum4(vector<int>& nums, int target) {int size = nums.size();if (size == 0)return 0;vector<int>re(target + 1, 0);//全部置0sort(nums.begin(),nums.end());int min_value = *nums.begin();re[min_value] = 1;for (int i = min_value + 1; i <= target; i++){for (int j = 0; j < size; j++){if(i-nums[j]>=0)re[i] = re[i] + re[i - nums[j]];}if (find(nums.begin(), nums.end(), i) != nums.end())re[i]++;}return re[target];}};
Submission Result: Accepted More Details
Next challenges: (M) Combination Sum
分析:
我们以上述例子来分析,当i=1时,此时只有一个组合的和等于1,那就是数组的第一个元素1;然后依次得到2的所有组合,它们关系如下:
sum=1
1
sum=2
1,1;
2;
sum=3
1,1,1;
2,1;
1,2;
3;
sum=4
1,1,1,1;
1,2,1;
1,1,2;
2,1,1;
3,1;
1,3;
2,2;
从上面的规律我们可以看出:当我们要求sum=4的时候的组合的数目,我们可以利用re[4]=sum(re[3]+1,re[2]+2,re[1]+1)这个表达式的意思就是:
我们在3的组合里的每一个排列后面加上1,就可以得到通过加1之后变成和为4的序列(注意这样做的前提是题目已经说明了每个数使用的次数不受限制,同一组合中哪怕是有相
同的数,只要它们的顺序不一样就是不同的组合,比如1,1,2和2,1,1)。但是这里有一个需要注意的是如果我们要求的i刚好和nums里的某个数相等,那么这个时候re[i]的个数
还要额外的+1,比如求re[3]的时候,数组里3那么就不需要re[1]+2,re[2]+1,这个时候直接一个3就行,这也是为什么很多版本里re[0]=1的原因!!!!!
0 0
- Leetcode 377. Combination Sum IV
- 【LeetCode】377. Combination Sum IV
- [leetcode] 377. Combination Sum IV
- 【leetcode】377. Combination Sum IV
- LeetCode:377. Combination Sum IV
- [leetcode] 377.Combination Sum IV
- 377. [LeetCode]Combination Sum IV
- leetcode-377. Combination Sum IV
- LeetCode 377. Combination Sum IV
- Leetcode 377. Combination Sum IV
- 【LeetCode】 377. Combination Sum IV
- [LeetCode]377. Combination Sum IV
- [leetcode]377. Combination Sum IV
- Leetcode 377. Combination Sum IV
- leetcode 377. Combination Sum IV
- LeetCode: 377. Combination Sum IV
- 【Leetcode】Combination Sum IV
- [leetcode] Combination Sum IV
- pe重装系统后F盘无法打开系统拒绝访问解决方案
- 浅谈 akka actor
- std::mutex 和 std::lock_guard 小例子
- mysql rpm安装
- 水杯问题(就是一个简单的广搜)
- leetcode-377. Combination Sum IV
- 使用xml配置Mybatis
- autopep8规范你的python代码
- java网络编程之I/O模型(一)
- mathematica判断欧拉图
- 326. Power of Three / 342. Power of Four
- C++ Primer(第五版)练习6.36 6.37
- java jni 动态编译指令
- Linux下非常有用的命令