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

【回溯】Leetcode 77. 组合【中等】

组合

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

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

示例 1:

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

解题思路

  • 定义递归函数:定义一个递归函数 backtrack 用来生成组合。
  • 递归终止条件:如果当前组合的长度达到 k,将其添加到结果列表中。
  • 选择元素:从当前起始元素到 n 进行迭代,选择每个元素加入当前组合。
  • 递归调用:选择元素后,递归调用函数生成下一个元素的组合。
  • 回溯:在递归完成后,移除当前选择的元素,尝试选择下一个元素。

Java实现

public class Combine {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<>();backtrack(1, n, k, new ArrayList<>(), res);return res;}private void backtrack(int start, int n, int k, List<Integer> path, List<List<Integer>> res) {// 如果组合完成if (path.size() == k) {res.add(new ArrayList<>(path));return;}// 从`start`到`n`遍历所有的数字for (int i = start; i <= n; i++) {// 将`i`添加到当前组合path.add(i);// 使用下一个整数完成组合backtrack(i + 1, n, k, path, res);// 回溯,通过移除`i`path.remove(path.size() - 1);}}// 测试用例public static void main(String[] args) {Combine solution = new Combine();System.out.println(solution.combine(4, 2)); // 期望输出: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]System.out.println(solution.combine(5, 3)); // 期望输出: [[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]}
}

时间空间复杂度

  • 时间复杂度:O(C(n, k) * k),其中 C(n, k) 是从 n 个数中选 k 个数的组合数。生成每个组合需要 O(k) 的时间。
  • 空间复杂度:O(k),递归栈的深度最多为 k,存储当前组合的路径 path 也需要 O(k) 的空间。
http://www.lryc.cn/news/373477.html

相关文章:

  • 项目中常量的定义方式
  • BL104钡铼多协议采集网关助力企业智能化转型
  • 【LC刷题】DAY08:151 55 28 459
  • Debian 12.5 一键安装 Oracle 19C 单机
  • ARP协议相关
  • Github 2024-06-14 开源项目日报Top10
  • 记录AE快捷键(持续补充中。。。)
  • 基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计
  • React@16.x(29)useRef
  • 无人机的力量——在民用方面的应用
  • 探索档案未来,尽在ARCHE-2024
  • Maven 核心插件 maven-clean-plugin 使用详解
  • 金融数据中心布线运维管理解决方案
  • C++初学者指南第一步---2. Hello world
  • gitLab批量下载有权限的项目
  • 解决 kali 中使用 vulhub 拉取不到镜像问题
  • CSS3 简介
  • springboot事务管理的机制是什么
  • Linux下tar命令解压缩
  • 当财政支持减弱时,国有企业如何实现降本增效?
  • 大模型「训练」与「微调」概念详解【6000字长文】
  • JVM 垃圾回收器
  • Spring IOC 容器的构建流程?
  • 官方文档 搬运 MAXMIND IP定位 mysql导入 简单使用
  • PHP入门教程1:PHP的基础概念和基本语法
  • 头歌资源库(5)求阶乘问题
  • 09:整型与布尔型的转换
  • 51单片机STC89C52RC——2.1 独立按键控制LED亮灭
  • 系统架构师考点--计算机硬件
  • vite-plugin-mock前端自行模拟接口返回数据的插件