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

leetcode第77题组合

原题出于leetcode第77题https://leetcode.cn/problems/combinations/

1.树型结构

2.回溯三部曲

  1. 递归函数的参数和返回值

  2. 确定终止条件

  3. 单层递归逻辑

3.代码

二维数组result
一维数组path
void backtracking(n,k,startindex){
    if(path.size==k){
        result.append(path);
        return ;
    }
    for(i=startindex;i<=n;i++){
        path.push(i);
        backtracking(n,k,i+1);
        path.pop();    
    }
    return ;
}

4.剪枝算法(长度为k时的剪枝)

由于要求组合的长度为k,故若遍历到某个数时,其后面刚好有k-1个数,则这个数即为应当遍历的最后一个数。如下图树型结构所示:

可以在遍历时对i的范围进行调整,调整逻辑如下:

  • 首先,我们要知道当前选取了多少个元素,即path.size()

  • 其次,计算还需要选取多少个元素:k-path.size();

  • 假设此时取到的数为x,则还未取的数的范围是[x,n],故有:

n-x+1>=k-path.size()

解得:x<=n-(k-path.size)+1

所以i的取值到n-(k-path.size)+1即可,具体代码如下:

二维数组result
一维数组path
void backtracking(n,k,startindex){
    if(path.size==k){
        result.append(path);
        return ;
    }
    for(i=startindex;i<=n-(k-path.size)+1;i++){
        path.push(i);
        backtracking(n,k,i+1);
        path.pop();    
    }
    return ;
}

文章中有关树型结构的图片出自代码随想录,这是一个非常好的算法平台,强烈推荐学算法的同学看一看

相关文章:

  • 【Spring Boot 应用开发】-05 命令行参数
  • c语言、c++怎么将string类型数据转成int,怎么将int转成string
  • MySQL忽略大小写问题
  • 京东一面:为什么 IDEA 建议去掉 StringBuilder,而要使用 “+” 拼接字符串?
  • 前端怎么排查幽灵依赖
  • doris:Iceberg
  • python二级考试中会考到的第三方库
  • 【大模型LLM面试合集】分布式训练_张量并行
  • 视觉Transformer(ViT)解析:它们比CNN更好吗?
  • [python] 类
  • 李国杰院士 “七问” DeepSeek:深度剖析 AI 发展新态势
  • Gin框架从入门到实战:核心用法与最佳实践
  • 深入探索像ChatGPT这样的大语言模型
  • FastGPT 引申:常见 Rerank 实现方案
  • Unity打包到webgl鼠标图标大小不正确
  • leetcode 0018 四数之和-medium
  • 【linux】文件与目录命令 - uniq
  • SpringBoot接入DeepSeek(硅基流动版)+ 前端页面调试(WebSocket连接模式)
  • DELL EMC Unity存储如何让控制器进入service mode和退出service mode
  • SQL进阶技巧:上课时长计算
  • 石家庄城市建设投资中心网站/html+css网页制作成品
  • 0基础网站建设教程/接外包网站
  • c 做的网站/免费二级域名查询网站
  • 南京政府网站建设/seo综合查询怎么用的
  • 王晴儿网站建设/西安网站建设排名
  • ecshop网站后台批量上传图片/第三方营销平台有哪些