代码随想录算法训练营Day19 | 77.组合、216.组合总和|||、17.电话号码的字母组合

回溯问题的模板

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

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

LeetCode 77 组合

在这里插入图片描述
本题思路:组合问题,利用回溯来解决。回溯就是用来解决纯暴力解决不了的问题。此题,如果通过 for 循环, 也可以解决,但是如果 k 越来越来越大,那么就要写越来越多的 for,不切实际。
此时就可以利用回溯来解决。

  • 第一步就是分析终止条件,终止条件,就是组合大小等于 k,就可以进行结束,进行保存
  • 而 for 循环处理的就是这每一个元素
    • 保存节点
    • 然后进行递归处理
    • 然后回退到上一个节点
class Solution {

    public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> res = new ArrayList();
        List<Integer> path = new ArrayList();
        backtracking(path,res,n,k,1);
        return res;
    }

    public void backtracking(List<Integer> path,List<List<Integer>> res,int n, int k, int startIndex){
        // 先找出口终止条件
        if(path.size() == k){
            res.add(new ArrayList(path));
            return;
        }
        for(int i = startIndex; i <= n-(k-path.size())+1 ; i++){
            path.add(i);
            backtracking(path,res,n,k,i+1);
            path.removeLast();
        }
    }
}

LeetCode 216 组合总和||

在这里插入图片描述
本题思路:和上题一样,终止条件也是元素个数满足为 k的时候,不过保存结果的时候,要加个判断,和是否等于 n,只有等于才会保存起来。

class Solution {
    public List<List<Integer>> combinationSum3(int k, int n) {
        List<List<Integer>> res = new ArrayList();
        List<Integer> path = new ArrayList();
        backtracking(res,path,k,n,1);
        return res;
    }


    public void backtracking(List<List<Integer>> res, List<Integer> path, int k , int n , int startIndex){
        // 终止条件
        if(path.size() == k){
            int sum = 0;
            for(int i = 0; i < path.size(); i++){
                sum += path.get(i);
            }
            if(sum == n){
                res.add(new ArrayList(path));
            }
        }
        for(int i = startIndex; i <= 9; i++){
            path.add(i);
            backtracking(res,path,k,n,i+1);
            path.removeLast();
        }
    }
}

LeetCode 17 电话号码的字母组合

在这里插入图片描述
本题思路:本题和上述两题不同,不在同一个集合里面,是不同的集合,所以参数就用 index 了,不用 startIndex 进行去重。

  • 首先要将数字和对应的字符做一个映射
  • 这里终止条件就是遍历完当前数字所对应的字符串了
class Solution {

    String[] sMap = new String[]{" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

    public List<String> letterCombinations(String digits) {
        List<String> res = new ArrayList();
        List<Character> path = new ArrayList();
        if(digits.equals("")){
            return res;
        }
        backtracking(digits,0,res,path);
        return res;
    }

    public void backtracking(String digits, int index, List<String> res, List<Character> path){
        // 终止条件
        if(index == digits.length()){
            StringBuilder s =  new StringBuilder();
            for(int i = 0; i < path.size(); i++){
                s.append(path.get(i));
            }
            res.add(s.toString());
            return;
        }
        Character ch = digits.charAt(index);
        String str = sMap[ch - '0'];
        for(int i = 0; i < str.length(); i++){
            path.add(str.charAt(i));
            backtracking(digits,index+1,res,path);
            path.removeLast();
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D的兔子=2D的lena?

大家好&#xff0c;今天分享一个资源&#xff0c;免费。 斯坦福兔子是3D初学者绕不开的一张图吧&#xff1f; 今天我简单用pcl读一下&#xff0c;并且把pcd文件分享一下&#xff0c;大家有需要自取。 #include <pcl/io/pcd_io.h> #include <pcl/visualization/cloud…

java⽇志体系

⽇志体系 1.体系概述2.日志的使用1.上古时代的sout2.开创先驱的log4j3.搞事情的JUL4.应运⽽⽣的JCL5.再起波澜的logback6.再度⻘春的log4j2 本篇在jdk21下测试通过 1.体系概述 1.日志接口 JCL&#xff1a;Apache基⾦会所属的项⽬&#xff0c;是⼀套Java⽇志接⼝&#xff0c;之…

python基础练习之—Series

Series介绍&#xff1a; Pandas Series 类似表格中的一个列&#xff08;column&#xff09;&#xff0c;类似于一维数组&#xff0c;可以保存任何数据类型。Series 由索引&#xff08;index&#xff09;和列组成&#xff0c;可以通过列表&#xff0c;元组&#xff0c;数组&…

qss设置某一个widget下的Checkbox的样式

#ObjectName 控件名称{属性&#xff1a;值&#xff1b;属性1&#xff1a;值1} 如下&#xff1a; 效果&#xff1a;

【QT-UI】

1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …

K2P路由器刷OpenWrt官方最新版本固件OpenWrt 23.05.2方法 其他型号的智能路由器OpenWrt固件刷入方法也基本上适用

最近路由器在开机时总出问题,于是就那他来开刀,直接刷一个OpenWrt官方最新版本的固件, 刷其他第三方的固件总是觉得不安全, 而且很多第三方固件都带了些小工具,始终会有安全隐患, 而且占用内存空间太多,本来这个东西就没有多少内存,于是就干脆刷一个官方的原始固件(才6.3M, 相…

分析一个项目(微信小程序篇)一

分析一个项目讲究的是如何进行对项目的解析分解&#xff0c;进一步了解项目的整体结构&#xff0c;熟悉项目的结构&#xff0c;能够知道每个组件所处在哪个位置&#xff0c;发挥什么作用。 本次所介绍的是微信小程序项目&#xff08;甑选商场&#xff09;&#xff1a; 其首页…

论文阅读 BERT GPT - transformer在NLP领域的延伸

文章目录 不会写的很详细&#xff0c;只是为了帮助我理解在CV领域transformer的拓展1 摘要1.1 BERT - 核心1.2 GPT - 核心 2 模型架构2.1 概览 3 区别3.1 finetune和prompt 3.2 transformer及训练总结 不会写的很详细&#xff0c;只是为了帮助我理解在CV领域transformer的拓展 …

js(JavaScript)数据结构之数组(Array)

什么是数据结构&#xff1f; 下面是维基百科的解释&#xff1a; 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装&#xff1a;一个数据结构可被视为两个函数之间的接口&#xff0c;或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

Qt QLabel标签控件

文章目录 1 属性和方法1.1 文本1.2 对齐方式1.3 换行1.4 图像 2. 实例2.1 布局2.2 为标签添加背景色2.3 为标签添加图片2.4 代码实现 QLabeI是Qt中的标签类&#xff0c;通常用于显示提示性的文本&#xff0c;也可以显示图像 1 属性和方法 QLabel有很多属性&#xff0c;完整的可…

鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展&#xff0c;招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求&#xff0c;建立一个公平、公开、公正的采购环境至关重要。在这个背景下&#xff0c;我们开发了一款电子招标采购软件&#xff0c;以最大限度地控制采购成本&#…

Spring MVC学习之——入门

Spring MVC 介绍 Spring MVC 是Spring框架的一个模块&#xff0c;是一个基于 MVC 设计模式的轻量级 Web 开发框架&#xff0c;本质上相当于 Servlet。 SpringMVC 是 Spring 为表示层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的…

作业--day43

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff0c;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

图像分割实战-系列教程12:deeplab系列算法概述

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、空洞卷积 图像分割中的传统做法&#xff1a;为了增大感受野&#xff0c;通常都会选择pooling操…

centos7 yum添加源或换源

yum添加源或换源 一般来说yum源是我们需要下载的软件的远程仓库地址(当然也可以配置本地源)&#xff0c;centos系统带有几个官方源&#xff0c;默认启用的仅有base,updates和extras三个。有时我们需要的软件在官方源中没有&#xff0c;这时我们就需要添加第三方源或换默认源。…

Halcon根据灰度特征值选择区域select_gray

Halcon根据灰度特征值选择区域 与select_shape算子类似&#xff0c;灰度值图像也可以快捷地根据特征值选择符合设定条件的区域。select_gray算子用于实现这一功能&#xff0c;该算子能接受一组区域作为输入&#xff0c;然后根据选定的特征计算其是否满足特定的条件。当所有区域…

1.5号io网络

僵尸进程和孤儿进程 僵尸进程 孤儿进程 守护进程 1.守护进程相当于一个服务&#xff0c;不依赖于终端而存在 2.守护进程随着系统的启动而启动&#xff0c;关闭而关闭 3.守护进程创建流程 1、创建一个孤儿进程 2、重设守护进程的会话id和组id 3、修改守护进程的操作目录为…

指定linux文件夹下所有文件赋权命令“chmod -R 755”

仓库&#xff1a;Ai-trainee/GPT-Prompts-Hub 下面我们假设要为&#xff1a;/opt/robot/lib/robot_control/下所有子文件赋权 如果要为 robot_control 目录中的所有文件分配权限&#xff08;在 Linux 术语中也称为“更改文件权限”或“chmod”&#xff09;&#xff0c;则可以…

【从零开始学技术】Fiddler 抓取 https 请求大全

1.Fiddler代理浏览器设置 注意浏览器代理区别 Chrome/IE浏览器使用的都是系统代理设置 在chrome浏览器的设置中搜索代理&#xff0c;可以看到 打开IE浏览器&#xff0c;选择设置->Internet选项 Firefox浏览器使用的是单独的一套代理系统 在Firefox的代理设置中&#xff0c;我…

锂电池放电结束后电压回升,充电结束后电压下降

放电时&#xff0c;撤去负载&#xff0c;开路电压会上升&#xff1b;充电时&#xff0c;撤去电源&#xff0c;开路电压会下降。 一、极化 极化是指事物在一定条件下发生两极分化&#xff0c;使其性质相对于原来状态有所偏离的现象。 二、电化学极化 对于任何电化学体系中&am…