代码随想录算法训练营第二十四天|

2024-06-01 08:52

本文主要是介绍代码随想录算法训练营第二十四天|,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[LeetCode] 77. 组合

[LeetCode] 77. 组合 文章解释

[LeetCode] 77. 组合 视频解释

题目:

给定两个整数 nk,返回范围 [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

[LeetCode] 77. 组合 

自己看到题目的第一想法

    for + for + ... + for...

看完代码随想录之后的想法

    答案是如此的精简.

// for 循环递归法
class Solution {private List<List<Integer>> result = new ArrayList<>(); private List<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backTracking(n, k, 1);return result;}private void backTracking(int n, int k, int start) {if (path.size() + n - start + 1 < k) {return;}if (path.size() == k) {result.add(new ArrayList<>(path));return;}for (int i = start; i <= n; i++) {path.add(i);backTracking(n, k, i + 1);path.remove(path.size() - 1);}}
}
class Solution {private List<List<Integer>> result = new ArrayList<>(); private List<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backTracking(n, k, 1);return result;}private void backTracking(int n, int k, int start) {if (path.size() + n - start + 1 < k) {return;}if (path.size() == k) {result.add(new ArrayList<>(path));return;}path.add(start);backTracking(n, k, start + 1); // 带着 1 去递归path.remove(path.size() - 1);backTracking(n, k, start + 1); // 不带 1 去递归}
}
// 字典推断法. 这个要通过递归得到的结果中, 去推断出该规律.
// 虽然节省递归堆栈的空间, 但是效率并没有提高.
class Solution {private List<List<Integer>> result = new ArrayList<>(); private List<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {for (int i = 1; i <= k; i++) {path.add(i);}path.add(n + 1);int j = 0;while (j < k) {j = 0;result.add(new ArrayList<>(path.subList(0, path.size() - 1)));while (j < k && path.get(j) + 1 == path.get(j + 1)) {path.set(j, j + 1);j++;}path.set(j, path.get(j) + 1);}return result;}
}

自己实现过程中遇到哪些困难

    无.

这篇关于代码随想录算法训练营第二十四天|的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020548

相关文章

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意