【动态规划】LeetCode 377. Combination Sum IV
LeetCode 377. Combination Sum IV
Solution1:
我的未能AC的答案
题目描述的和前几道题差不多,但实际上不能用DFS来做(会超时),要用动态规划,还是记录一下吧。。。
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {int num = 0;vector<int> out;combinationSumDFS(nums, target, out, num);return num;}void combinationSumDFS(vector<int> &candidates, int target, vector<int> &out, int& num) {if (target < 0) return;else if (target == 0) num++;else {for (int i = 0; i < candidates.size(); ++i) {out.push_back(candidates[i]);combinationSumDFS(candidates, target - candidates[i], out, num);out.pop_back();}}}
};
Solution2:
参考网址:http://www.cnblogs.com/grandyang/p/5705750.html
这道题是组合之和系列的第四道,我开始想当然的一位还是用递归来解,结果写出来发现TLE了。
这道题的真正解法应该是用DP来做,解题思想有点像之前爬梯子的那道题Climbing Stairs,我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解:
比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了,参见代码如下:
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target + 1);dp[0] = 1;for (int i = 1; i <= target; ++i) {for (auto a : nums) {if (i >= a) dp[i] += dp[i - a];}}return dp.back();}
};
【动态规划】LeetCode 377. Combination Sum IV相关推荐
- leetcode 377. Combination Sum IV | 377. 组合总和 Ⅳ(动态规划)
题目 https://leetcode.com/problems/combination-sum-iv/ 题解 最近养成了上来直奔 Related Topics 的习惯- 确认过眼神,又是个 dp 问 ...
- LeetCode 377. Combination Sum IV
问题描述 地址 问题分析 该题类似于排列问题,一个元素可以使用多次.而 LeetCode 518. Coin Change 2 类似于组合问题,同样一个元素可以使用多次,两题都是统计可能性的次数,因为 ...
- 【DFS】LeetCode 39. Combination Sum
LeetCode 39. Combination Sum Solution1: DFS,这个套路要熟记啊! class Solution { public:vector<vector<in ...
- LeetCode 653. Two Sum IV - Input is a BST--Python解法
题目地址:Two Sum IV - Input is a BST - LeetCode Given a Binary Search Tree and a target number, return t ...
- LeetCode Combination Sum IV(动态规划)
问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...
- leetcode 216. Combination Sum III | 216. 组合总和 III(Java)
题目 https://leetcode.com/problems/combination-sum-iii/ 题解 回溯法(back tracking)是一种选优搜索法.可以理解为通过选择不同的岔路口寻 ...
- leetcode 39. Combination Sum | 39. 组合总和(Java)
题目 https://leetcode.com/problems/combination-sum/ 题解 不是最优解法. 对于每一个位置 i 上 的元素,分为选或不选两种情况. 遍历每一个位置,计算强 ...
- LeetCode 653. Two Sum IV - Input is a BST
题目: Given a Binary Search Tree and a target number, return true if there exist two elements in the B ...
- 【DFS + backtracking】LeetCode 216. Combination Sum III
Solution1:我的答案 DFS+backtracking,时间复杂度O(2m)=O(29)O(2m)=O(29)O(2^m)=O(2^9),空间复杂度O(k)O(k)O(k) class Sol ...
最新文章
- Linux Shell脚本之向脚本传递参数
- 列表,集合,元组,字典
- 关于C++中的条件编译
- oracle怎么查找最大值,oracle – 在每个分区的列中查找最大值
- 用户权限 英文_伴鱼绘本终身VIP卡+自然拼读精品课,完课返461元!英文原版绘本...
- 谷歌YouTube算法团队:视频质量评价的集成池化方法
- 手把手带你入门加密算法的Python实现
- render_notebook()结果没有图_数与图(20)——机器学习.下
- 比较两个txt文件的差异
- 【哼歌检索】十大语音搜索应用服务
- 鱼塘钓鱼题解(堆解决)
- php alt什么意思,img标签的alt作用是什么
- Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
- 2019网络直播稳中有变:直播带货火出圈 5G带来弯道超车新机会
- App设计的基本原则和规范
- 【聚类之K-Means】K-Means学习实例
- 使用阿里云实现营业执照的查询
- http中各个状态码的含义
- 第十八次CCF计算机软件能力认证
- 如何使用OpenCV测量图像中物体之间的距离
热门文章
- 如何用T—SQL命令查询一个数据库中有哪些表?
- 如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面(二)
- Tensorflow(r1.4)API--tf.summary.scalar
- 破坏计算机系统信息罪司法解释,破坏计算机信息系统罪司法解释是怎样的的呢?...
- tinyint数据类型php筛选时怎么判断_PHP从入门到精通(三)PHP语言基础
- github 仓库管理及代码上传
- 白鹭引擎生成html,初识Egret白鹭引擎 之 创建舞台
- Python数据结构与算法(1.5)——Python基础之函数与异常
- linux 分析系统配置,在Linux系统上部署AWStats日志分析系统
- c+const_如何在C ++中使用const? 初学者指南