nums数组中元素是正整数

大问题转换为小问题

思路和分治法解决组合相同,代码也相似

分治法解决组合问题(递归)_m0_52043808的博客-CSDN博客

只不过递归出口时需要判断组合总和是否为n

在调用递归函数时,n需要变小

递归出口

(1)如果k=1,则可以直接写出数组的所有满足值为n组合(每个元素都是一个组合)

(2)如果数组的个数等于k,如果数组所有元素之和为n,组合就是nums本身

解释:k在递归过程中不断减少,数组的个数在递归过程中不断减少,当减少到以上两种情况时,所有的组合情况可以直接写出来

剪枝函数

n在递归过程不断变小,当n<0时,说明之后的数不存在组合

代码

 vector<vector<int>> combine(vector<int>&nums, int k,int n) {vector<vector<int>>res;if (n < 0){return res;}if (nums.size() == k){int sum=0;for (int i = 0; i < nums.size(); i++){sum += nums[i];}if (sum == n){res.push_back(nums);}return res;}if (k == 1){vector<int>temp;for (int i = 0; i < nums.size(); i++){if (nums[i] == n){temp.push_back(nums[i]);res.push_back(temp);temp.pop_back();}}return res;}vector<vector<int>>ans;for (int i = 0; i < nums.size() - k+1; i++){vector<vector<int>>temp;vector<int>n_nums(nums.begin() + i+1, nums.end());temp= combine(n_nums, k - 1,n-nums[i]);vector<int>single;single.push_back(nums[i]);for (int j = 0; j < temp.size(); j++){temp[j].insert(temp[j].end(), single.begin( ), single.end());}for (int i = 0; i < temp.size(); i++){ans.push_back(temp[i]);}}return ans;}

分治法解决组合总和问题(leetcode216)相关推荐

  1. 分治法解决组合问题(递归)

    大问题转换为小问题 求nums数组中k个数的所有组合,只要确定第一个数, 问题转化为求第一个数之后的数组k-1个数的所有组合,然后在这些组合里加上第一个数 递归出口: (1)如果k=1,则可以直接写出 ...

  2. 分治法解决最大子数组问题

    分治法解决最大子数组问题 参考文章: (1)分治法解决最大子数组问题 (2)https://www.cnblogs.com/Christal-R/p/Christal_R.html (3)https: ...

  3. 分治法解决循环赛日程表

    分治法解决循环赛日程表 问题描述 设有n=2^k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次. (2)每个选手一天只能比赛一次. ( ...

  4. 分治法解决矩阵乘法问题

    分治法解决矩阵乘法问题 传统for循环: #include<iostream> #include<cstdio> #include <vector> #includ ...

  5. 分治法解决棋盘覆盖问题

    分治法解决棋盘覆盖问题 问题描述: 在一个2k×2k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.显然,特殊方格在棋盘中出现的位置有4k中情形,因而有4k中不同的棋盘. ...

  6. 分治法解决最小套圈问题

    /*     Copyright    by ZhongMing-Bian     Jan,6,2010   */ /*             分治法解决最小套圈问题                 ...

  7. 分治法解决最近点对问题

    问题 给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小.严格地说,最接近点对可能多于1对.为了简单起见,这里只限于找其中的一对. 原理(这段为抄袭https://blog. ...

  8. 分治法解决计算凸包问题

    清华大学的邓俊辉老师的<计算几何>公开课中,在计算凸包问题时会遇到极点法和极边法: 极点法是假设所有的点都是凸包上的点,然后根据In-triangle测试,把去除不是极点的点,时间复杂度是 ...

  9. 蛮力法与分治法解决最近点对问题-详细分析与C++代码实现

    最近点对问题 最近点对问题の目录 最近点对问题 什么是最近点对问题 代码基本框架 蛮力法及其代码 分治法及其代码 一般分治法遇到的特殊情况 如何优化分治法(6点确定与4点确定解法) 优化后分治法(4点 ...

最新文章

  1. Spring MVC常用注解说明
  2. Ruby 三元一次线性方程组
  3. 错误日志类-也可以用于查看输出结构
  4. wxWidgets:wxMiniFrame类用法
  5. 用python实现yale人脸数据集降维_用Python实现磁盘IO操作全攻略,让数据流动起来!...
  6. python画图中grid等于true_python – 散布在GridPlot中覆盖多个绘图对象
  7. 21天Jenkins打卡day8-配置SSH远程服务器
  8. 解决chrome崩溃的方法
  9. C# 子类实例化基类 基类使用不了子类的方法_C#委托事件机制:事件的完整声明,触发和事件的本质(6)...
  10. 特征的标准化和归一化
  11. ZBrush如何结合数位板雕刻模型
  12. 每日工作记录——状态机的编码选择
  13. Babylonjs 官网demo预览图合集整理 带说明
  14. 出现窗口:CMD提示应用程序错误
  15. 给图片添加文字(换行)水印
  16. Java学习简单画椭圆
  17. 动画骨骼【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)...
  18. 【神经网络与深度学习】 Numpy 实现全连接神经网络
  19. 使用ffmpeg 命令行解码并显示像素格式为.raw图像
  20. 电子科技大学-高级计算机系统结构

热门文章

  1. POJ 2983 Is the Information Reliable?(差分约束系统)
  2. XPath学习:轴(4)——ancestor
  3. Interesting Finds: 2008.04.06
  4. QT5.14在Win10和Win7下的安装
  5. UVA785 LA5281 Grid Colouring【DFS】
  6. Bailian4019 黑色星期五【模拟】
  7. 《程序设计技术》第三章例程
  8. HDU1465 不容易系列之一【递推】
  9. UVA10165 Stone Game【Nim游戏】
  10. python tricks —— datetime 删除日期中的前导 0