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

leetcode77.组合

leetcode77.组合

组合

题目抽象

我们把组合问题抽象为以下树形结构:

在这里插入图片描述

我们将上图的树形结构称之为决策树,从决策树中我们可以看出,n决定决策树的宽度即循环次数,而k决定决策树的深度即递归次数

在这里插入图片描述

我们挑选出某一具体路径来进行分析。我们在得到[1,2]后递归返回,想要再得到[1,3],就需要把2

“还回去”,因此,这便是一道经典的回溯问题

回溯三部曲

  • 确定递归函数的函数头

首先我们要定义两个全局变量

  • vector<vector<int>> ret:存放最终返回值
  • vector<int> path:存放某一符合要求的结果

也可以将这两个全局变量当作参数传递给递归函数

void dfs(int n, int k, int start)

start用来确定下一层递归的开始位置,调用下一层递归函数时传入start+1,可以避免取到重复元素

  • 单层遍历的过程

for循环中,istart位置开始遍历,path存放取到的值,调用下一层递归,递归结束后回溯

for(int i=start;i<=n;i++)
{
    path.push_back(i);
    dfs(n,k,i+1);
    path.pop_back();
}
  • 确定递归函数终止条件

path.size() == k时递归终止,将path加入ret中后返回

if(path.size() == k)
{
    ret.push_back(path);
    return;
}

完整代码

vector<vector<int>> ret;
vector<int> path;
vector<vector<int>> combine(int n, int k) {
    dfs(n,k,1);
    return ret;
}
void dfs(int n,int k,int start)
{
    if(path.size() == k)
    {
        ret.push_back(path);
        return;
    }
    for(int i=start;i<=n-k+path.size()+1;i++)
    {
        path.push_back(i);
        dfs(n,k,i+1);
        path.pop_back();
    }
}

相关文章:

  • mac本地安装运行Redis-单机
  • Hadoop、Spark、Flink Shuffle对比
  • 《Python实战进阶》No15: 数据可视化:Matplotlib 与 Seaborn 的高级用法
  • 系统架构设计师—系统架构设计篇—SOA架构
  • Linux环境通过1Panel连接Maxkb接入AI(千帆大模型)
  • 基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享
  • 电力项目:电力日负荷曲线预测(文末有程序、数据)
  • 实用建模技术
  • 题解:洛谷 AT_dp_c Vacation
  • 软件测试的基础入门(二)
  • 【2025】基于Python+Django的酒店民宿预订管理系统(源码+调试+答疑+学习资料)
  • 【AI】基于扩散方案的大语言模型研究报告
  • 2025 Linux系统安装docker后安装docker-compose
  • 玩转ChatGPT:GPT 深入研究功能
  • LVGL开发说明
  • 深度生成模型(五)——生成对抗网络 GAN
  • 3月8日星期六今日早报简报微语报早读
  • mpirun指令使用
  • 【OpenCV】005、查看图像的形状(图像高度、宽度、通道数)shape()函数,img.shape[0]、[1]、[2]
  • vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
  • 施工员证书查询网站/武汉seo搜索引擎优化
  • 做网站的软件m开头/营销互联网推广公司
  • 网站的做用/网上推广产品怎么做
  • 小型网站开发小论文/百度网盘官网登录入口
  • wordpress图片墙插件/seo排名优化软件免费
  • 照片制作视频软件app/抖音优化排名