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

leetcode-19-回溯-组合问题(剪枝、去重)

引自代码随想录

一、[77]组合

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

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

1、大致逻辑

 k为树的深度,到叶子节点的路径即为一个结果

开始索引保证不重复取数(从当前位置往后取值)

每一个节点为一个for循环

2、剪枝(优化)

(1)和大于n,结束递归。

(2)剩余元素不足以满足k(k个元素)

剩下所需元素:k-path.size()

 至多从该起始位置开始遍历(否则元素个数不够):n - (k - path.size()) + 1

为什么有个+1呢,因为包括起始位置(从起始位置开始遍历)

我们要是一个左闭的集合(重要!!!!)

path.size() : 已经找的个数
k-path.size() :还需找的个数

[x, n]的数组长度起码应该是k-path.size()才有继续搜索的可能

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

解方程得 x = n+1 - (k-path.size()),

而且这个x是可以作为起点往下搜的

也就是for(i = s; i<=x; i++) 这里的x是可以取到的

类似题目[216]、[17](有点难度)、[39]、[40](需要对开始索引做处理)

http://www.lryc.cn/news/389078.html

相关文章:

  • Java案例实现双色球
  • JS(JavaScript)的BOM操作
  • 【CT】LeetCode手撕—82. 删除排序链表中的重复元素 II
  • C++ STL unique_ptr智能指针源码剖析
  • Unity中的的文件夹(特殊文件夹)
  • Go语言定时器Timer和Ticker到底怎么用
  • 41、web基础和http协议
  • 6-173 二分查找的关键字比较次数
  • 【基础篇】第5章 Elasticsearch 数据聚合与分析
  • 【网络安全】修改Host文件实现域名解析
  • Spring Boot 全面解析:从入门到实践案例
  • 222222222
  • Boost 智能指针
  • 在WSL Ubuntu中启用root用户的SSH服务
  • C语⾔数据类型和变量
  • 运行时类型信息(RTTI)
  • 使用 NVivo 定性数据分析软件指导癌症护理研究
  • R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性
  • 第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)
  • 容器化spring boot应用程序
  • 掌握智慧校园:资产来源功能解析
  • 基于公有云部署wordpress
  • vite+vue集成cesium
  • 2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、实现代码及参考论文
  • 华为机试HJ1字符串最后一个单词的长度
  • 排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
  • (2024)docker-compose实战 (6)部署前端项目(react, vue)
  • python 中的 下划线_ 是啥意思
  • Solana公链
  • 【LeetCode】反转字符串中的单词