day20|77. 组合。回溯的开始

news2025/2/28 15:53:06

回溯思路

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

77. 组合 

给定两个整数 n 和 k,返回范围 [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(数的范围是[1-n])、k(k个数为一组)、startIndex(记录当前层搜索开始的位置,初始为1),类型都为int。

2、回溯函数终止条件

当path.size==k时即终止,并把path路径加到result二维集合中

3、单层搜索的过程

for循环用来横向遍历,递归的过程是纵向遍历。

class Solution {
        List<List<Integer>> result=new ArrayList<>();
        List<Integer> path=new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {

        //int startIndex=1;
        backtracking(n,k,1);
        return result;
    }
    public void backtracking(int n,int k,int startIndex){
        if (path.size()==k){
            result.add(new ArrayList<>(path));
            return;
        }
        for (int i=startIndex;i<=n;i++){
            path.add(i);
            backtracking(n,k,i+1);//不能是startIndex+1,因为始终为2
            path.remove(path.size()-1);//回退
        }

    }
}

优化:

 对每一层进行剪枝操作,如图所示每一层至多n-(k-path.size())+1个

  1. 已经选择的元素个数:path.size();

  2. 所需需要的元素个数为: k - path.size();

  3. 列表中剩余元素(n-i) >= 所需需要的元素个数(k - path.size())

  4. 在集合n中至多要从该起始位置 : i <= n - (k - path.size()) + 1,开始遍历

为什么有个+1呢,因为包括起始位置,我们要是一个左闭的集合。

例如,n = 4,k = 3, 目前已经选取的元素为0(path.size为0),n - (k - 0) + 1 即 4 - ( 3 - 0) + 1 = 2。从至多2开始搜索都是合理的,可以是组合[2, 3, 4]。

 

for (int i=startIndex;i<=n-(k- path.size())+1;i++){
            path.add(i);
            backtracking(n,k,i+1);
            path.remove(path.size()-1);
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

91.使用注意力机制的seq2seq以及代码实现

1. 动机 2. 加入注意力 key和value是一样的 假设英语句子长为3的话&#xff0c;就会有3个key-value pair&#xff0c;key和vlaue是一个东西&#xff0c;每一个key-value pair对应第i个词的RNN的输出。之前的seq2seq只使用了最后的key-value&#xff0c;现在则是把所有的key-val…

JavaWeb语法八:网络原理初识

目录 1.局域网与广域网 1.1&#xff1a;局域网 1.2&#xff1a;广域网 2&#xff1a;网络基础知识 3.协议分层 3.1&#xff1a;分层的好处 3.2&#xff1a;TCP/IP五层&#xff08;或四层&#xff09;模式 4&#xff1a;封装和分用 4.1&#xff1a;封装 4.2&#xff1…

MyBatisPlus入门简介

目录 1. 入门案例 问题导入 1.1 SpringBoot整合MyBatisPlus入门程序 2. MyBatisPlus概述 问题导入 2.1 MyBatis介绍​​​​​​​ 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤&#xff1f; 1.1 SpringBoot整合MyBatisPlus入门程序 ①&#xff1a;创建新模块&am…

P3368 【模板】树状数组 2

【模板】树状数组 2 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 xxx&#xff1b; 求出某一个数的值。 输入格式 第一行包含两个整数 NNN、MMM&#xff0c;分别表示该数列数字的个数和操作的总个数。 第…

[Ext JS] Grid Summary(汇总行)特性

Ext.grid.feature.Summary 是 Grid 的feature之一。 这个特性会在表格的最下方多一行汇总。 汇总行主要包含两个部分: 值的计算效果的渲染使用后的效果如下: 定义方式 定义的步骤如下: 在grid的配置中使用features 加入 summary 的特性类型 ftype: summary在columns的每一列…

千峰学习【Ajax】总结

1.同步和异步 2.Ajax状态码 3.创建对象&#xff0c;发送请求 <script>//1.创建XHR&#xff1a; new XMLHttpRequest():var xhr new XMLHttpRequest();// console.log(xhr);//2&#xff0c;配置open(请求方式&#xff0c;请求地址&#xff0c;是否异步(默认为异步)) loc…

ESP32( IDF平台)+MAX30102 配合Pyqt上位机实现PPG波形显示与心率计算

0 引言 年前买了一个MAX30102模块&#xff0c;在家无聊做了这个demo对一些相关的知识进行学习。 主要学习的内容&#xff1a; 光体积变化描记图&#xff08;Photoplethysmogram, PPG&#xff09;测量原理学习。ESP32 IDF平台的MAX30102驱动开发&#xff0c;主要是初始化配置…

8、快捷键的使用

文章目录8、快捷键的使用8.1 常用快捷键第1组&#xff1a;通用型第2组&#xff1a;提高编写速度&#xff08;上&#xff09;第3组&#xff1a;提高编写速度&#xff08;下&#xff09;第4组&#xff1a;类结构、查找和查看源代码第5组&#xff1a;查找、替换与关闭第6组&#x…

理光M340W激光打印机加粉清零

粉盒型号&#xff1a; M340L&#xff08;如图&#xff09;&#xff1a; 加粉及清零&#xff1a; 原装粉盒不用考虑加粉了&#xff0c;原装粉盒墨粉用完后建议更换品牌代用的墨粉盒&#xff0c;品牌代用的墨粉盒直接带加粉口及清零齿轮&#xff1b; 1、加粉&#xff0c;打开加粉…

通信原理简明教程 | 物联网通信技术简介

文章目录1 物联网通信技术概述1.1 物联网通信的产生和发展1.2 物联网通信系统2 RFID技术2.1 RFID系统的组成2.2 RFID系统的工作原理2.3 RFID的典型应用3 ZigBee技术3.1 ZigBee技术的特点及应用3.2 ZigBee协议3.3 ZigBee网络的拓扑结构4 蓝牙通信技术4.1 蓝牙协议4.2 蓝牙网络连…

缓存失效问题和分布式锁引进

缓存失效问题 先来解决大并发读情况下的缓存失效问题&#xff1b; 1、缓存穿透  缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数 据库也无此记录&#xff0c;我们没有将这次查询的 null 写入缓存&#x…

CNN中池化层的作用?池化有哪些操作?

(还没写完~) 一、What is 池化 1. 基本介绍 池化一般接在卷积过程后。池化,也叫Pooling,其本质其实就是采样,池化对于输入的图片,选择某种方式对其进行压缩,以加快神经网络的运算速度。这里说的某种方式,其实就是池化的算法,比如最大池化或平均池化。在卷积神经网络…

Linux常见命令 21 - 网络命令 ping、ifconfig、last、lastlog、traceroute、netstat

目录 1. 测试网络连通性 ping 2. 查看和设置网卡 ifconfig 3. 查看用户登录信息 last 4. 查看所有用户最后一次登录时间 lastlog 5. 查看数据包到主机间路径 traceroute 6. 显示网络相关信息 netstat 1. 测试网络连通性 ping 语法&#xff1a;ping [-c] IP地址&#xff0c…

【计算几何】叉积

叉积 海伦公式求三角形面积 已知三角形三条边分别为a&#xff0c;b&#xff0c;c,设 pabc2p \frac{abc}{2}p2abc​, 那么三角形的面积为&#xff1a; p(p−a)(p−b)(p−c)\sqrt{p(p-a)(p-b)(p-c)}p(p−a)(p−b)(p−c)​ 缺点&#xff1a;在开根号的过程中精度损失 概念 两个…

DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释)

目录 那年深夏 引入 1.什么是深度优先搜索&#xff08;DFS&#xff09;&#xff1f; 2.什么是栈&#xff1f; 3.什么是递归&#xff1f; 图解过程 问题示例 1、全排列问题 2、迷宫问题 3、棋盘问题&#xff08;N皇后&#xff09; 4、加法分解 模板 剪枝 1.简介 2.剪枝的…

Jupyter notebook折叠隐藏cell代码块 (hidden more than code cell in jupyter notebook)

Nbextensions 中的 hidden input 可以隐藏cell 我们在notebook中嵌入了一段画图的代码&#xff0c;影响代码阅读&#xff0c;搜一下的把这段代码隐藏。 我们使用了 jupyter notebook配置工具 Nbextensions。找到hidden input&#xff0c;这样只会隐藏输入的代码&#xff0c;而…

Tkinter的Radiobutton控件

Tkinter的Radiobutton是一个含有多个选项的控件&#xff0c;但是只能选择其中的一个选项 使用方法 R1tk.Radiobutton(root,textA,variablevar,valueA,commandprintf) R1.pack() R2tk.Radiobutton(root,textB,variablevar,valueB,commandprintf) R2.pack() R3tk.Radiobutton(ro…

【Linux】同步与互斥

目录&#x1f308;前言&#x1f338;1、Linux线程同步&#x1f368;1.1、同步概念与竞态条件&#x1f367;1.2、条件变量&#x1f33a;2、条件变量相关API&#x1f368;2.1、初始化和销毁条件变量&#x1f367;2.2、阻塞等待条件满足&#x1f383;2.3、唤醒阻塞等待的条件变量&…

2023 年第一弹, Flutter 3.7 发布啦,快来看看有什么新特性

核心内容原文链接&#xff1a; https://medium.com/flutter/whats-new-in-flutter-3-7-38cbea71133c 2023 年新春之际&#xff0c; Flutter 喜提了 3.7 的大版本更新&#xff0c;在 Flutter 3.7 中主要有改进框架的性能&#xff0c;增加一些很棒的新功能&#xff0c;例如&#…

初识网络爬虫

爬虫简介 网络爬虫又称网络蜘蛛、网络机器人&#xff0c;它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页&#xff0c;并将所需要的数据抓取下来。通过对抓取的数据进行处理&#xff0c;从而提取出有价值的信息。 爬虫简单来说就是是通…