当前位置: 首页 > news >正文

77. 组合

题目

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

提示:

  • 1 <= n <= 20
  • 1 <= k <= n

思路

        这道题按照我们正常的思路就是从一开始和1后面的其他数字组合,然后再从2开始和后面的数字组合...代码中我们也可以采用这样的思路,按顺序排列可以防止有遗漏或者重复。从起始数字从1开始,把他加入自己数组,接着递归处理后续数字生成更多组合;如果临时组合长度达到k,就把他作为一个有效组合保存到res;每次递归返回后,把最后添加的数字删除,尝试其他可能,直到遍历完所有可能的组合,最终就能得到所有组合。

代码

class Solution {
public:vector<vector<int>> res;//结果数组vector<int> p;//子集数组void hs(int n,int k,int s){if(p.size()==k)//子集数组中的数达到k个就有了一个结果{res.push_back(p);return;}for(int i=s;i<=n-(k-p.size())+1;i++)//n-(k-p.size())+1是当前位置所能选择的最大数字{p.push_back(i);//处理节点hs(n,k,i+1);//进入递归,继续生成子集p.pop_back();//删除p中最后添加的数字}}vector<vector<int>> combine(int n, int k) {hs(n,k,1);return res;}
};

相关文章:

  • SQL进阶知识:七、数据库设计
  • 怎样通过互联网访问内网 SVN (版本管理工具)提交代码更新?
  • 第13章:MCP服务端项目开发实战:向量检索
  • JAVA | 聚焦 OutOfMemoryError 异常
  • 究竟什么是自动化测试?
  • ecovadis认证需要提供哪些文件?ecovadis认证优势是什么?
  • 传感器测量(图片流程)
  • 经典算法 区间统计种类
  • Opencv图像处理:旋转、打包、多图像匹配
  • TinyVue v3.22.0 正式发布:深色模式上线!集成 UnoCSS 图标库!TypeScript 类型支持全面升级!
  • Python 面向对象练习
  • 日内组合策略思路
  • 强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
  • 数据结构——栈与队列
  • 简单场景下的目标关联算法:GNN全局最近邻与匈牙利算法
  • 制作一款打飞机游戏20:敌人被击中时的视觉效果
  • 理解js函数(Ⅱ)
  • 嵌入式Linux驱动开发:LED实验
  • Spring Boot中自定义404异常处理问题学习笔记
  • Android学习总结之Room篇
  • 这 3 种食物,不要放进微波炉!第 1 个就大意了
  • 抗战回望16︱《青年生活》《革命青年》:抗战与青年
  • AI世界的年轻人|研究不止于实验室,更服务于遥远山区
  • 讲座预告|政府在人工智能研究和应用领域的作用
  • 美“群聊泄密门”始作俑者沃尔兹将离职
  • 中老铁路跨境国际旅客突破50万人次