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相关推荐

  1. leetcode 377. Combination Sum IV | 377. 组合总和 Ⅳ(动态规划)

    题目 https://leetcode.com/problems/combination-sum-iv/ 题解 最近养成了上来直奔 Related Topics 的习惯- 确认过眼神,又是个 dp 问 ...

  2. LeetCode 377. Combination Sum IV

    问题描述 地址 问题分析 该题类似于排列问题,一个元素可以使用多次.而 LeetCode 518. Coin Change 2 类似于组合问题,同样一个元素可以使用多次,两题都是统计可能性的次数,因为 ...

  3. 【DFS】LeetCode 39. Combination Sum

    LeetCode 39. Combination Sum Solution1: DFS,这个套路要熟记啊! class Solution { public:vector<vector<in ...

  4. 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 ...

  5. LeetCode Combination Sum IV(动态规划)

    问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...

  6. leetcode 216. Combination Sum III | 216. 组合总和 III(Java)

    题目 https://leetcode.com/problems/combination-sum-iii/ 题解 回溯法(back tracking)是一种选优搜索法.可以理解为通过选择不同的岔路口寻 ...

  7. leetcode 39. Combination Sum | 39. 组合总和(Java)

    题目 https://leetcode.com/problems/combination-sum/ 题解 不是最优解法. 对于每一个位置 i 上 的元素,分为选或不选两种情况. 遍历每一个位置,计算强 ...

  8. 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 ...

  9. 【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 ...

最新文章

  1. Linux Shell脚本之向脚本传递参数
  2. 列表,集合,元组,字典
  3. 关于C++中的条件编译
  4. oracle怎么查找最大值,oracle – 在每个分区的列中查找最大值
  5. 用户权限 英文_伴鱼绘本终身VIP卡+自然拼读精品课,完课返461元!英文原版绘本...
  6. 谷歌YouTube算法团队:视频质量评价的集成池化方法
  7. 手把手带你入门加密算法的Python实现
  8. render_notebook()结果没有图_数与图(20)——机器学习.下
  9. 比较两个txt文件的差异
  10. 【哼歌检索】十大语音搜索应用服务
  11. 鱼塘钓鱼题解(堆解决)
  12. php alt什么意思,img标签的alt作用是什么
  13. Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
  14. 2019网络直播稳中有变:直播带货火出圈 5G带来弯道超车新机会
  15. App设计的基本原则和规范
  16. 【聚类之K-Means】K-Means学习实例
  17. 使用阿里云实现营业执照的查询
  18. http中各个状态码的含义
  19. 第十八次CCF计算机软件能力认证
  20. 如何使用OpenCV测量图像中物体之间的距离

热门文章

  1. 如何用T—SQL命令查询一个数据库中有哪些表?
  2. 如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面(二)
  3. Tensorflow(r1.4)API--tf.summary.scalar
  4. 破坏计算机系统信息罪司法解释,破坏计算机信息系统罪司法解释是怎样的的呢?...
  5. tinyint数据类型php筛选时怎么判断_PHP从入门到精通(三)PHP语言基础
  6. github 仓库管理及代码上传
  7. 白鹭引擎生成html,初识Egret白鹭引擎 之 创建舞台
  8. Python数据结构与算法(1.5)——Python基础之函数与异常
  9. linux 分析系统配置,在Linux系统上部署AWStats日志分析系统
  10. c+const_如何在C ++中使用const? 初学者指南