代码随想录算法训练营第二十九天【回溯】| 491,46,47

news2024/11/14 19:32:59

491. Non-decreasing Subsequences

排列用startindex

树枝不去重,树层去重

子集问题结果在结点(个数>=2)

class Solution(object):
    def findSubsequences(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        path = []
        result = []
        self.backtracking(nums, 0, path, result)
        return result


    def backtracking(self,nums, startIndex, path, result):
        if len(path) > 1:
            result.append(path[:])
        # 注意这里不要加return,要取树上的节点

        uset = set()
        for i in range(startIndex, len(nums)):
            if (path and nums[i]<path[-1]) or nums[i] in uset:
                continue
            uset.add(nums[i])
            path.append(nums[i])
            self.backtracking(nums,i+1, path, result)
            path.pop()
            

        

46. Permutations

排列问题不用startindex

因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。

而used数组,其实就是记录此时path里都有哪些元素使用了,一个排列里一个元素只能使用一次

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        path =[]
        result = []
        used = [False]*len(nums)
        self.backtracking(nums,used, path, result )
        return result
    
    def backtracking(self, nums, used, path, result):
        if len(nums) == len(path):
            result.append(path[:])
            return #叶子节点收集

        for i in range(len(nums)):
            if used[i]:
                continue
            used[i]= True
            path.append(nums[i])
            self.backtracking(nums, used, path, result)
            path.pop()
            used[i]=False

47. Permutations II

树层去重(yes),树枝去重(no)

不用startindex

结合46和40

class Solution(object):
    def permuteUnique(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        path = []
        result = []
        nums.sort()
        used = [False] * len(nums)
        self.backtracking(nums, used, path, result)
        return result
    
    def backtracking(self, nums, used, path, result):
        if len(nums) == len(path):
            result.append(path[:])
            return

        for i in range(len(nums)):
            if i > 0 and nums[i] == nums[i-1] and not used[i-1]:
                continue
            if not used[i]:
                used[i] = True
                path.append(nums[i])
                self.backtracking(nums, used, path, result)
                path.pop()
                used[i] = False

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

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

相关文章

如何在网上下载到最新或者历史QGIS各个版本的C++源码

背景&#xff1a; 博主写下这篇文章的时候已经是PyQGIS下二开了两年&#xff0c;开发一些功能必须得去阅读QGIS的C版本源码&#xff0c;还得考虑到QGIS的长期稳定版和最新版的源码区别。 所以如何去下载到QGIS的源码&#xff0c;就成了当务之急。 QGIS3.36.3的C源码长得像这…

KOL营销在时尚、美妆与健康行业的特点解析与应用策略

在当今数字化时代&#xff0c;KOL营销已经成为推动品牌影响力和销售增长的重要策略之一。尤其在时尚、美妆和健康等行业&#xff0c;KOL的影响力和效果尤为显著。本文Nox聚星将和大家详细探讨KOL营销在这些行业中的应用情况、特点以及最佳实践。 一、时尚行业KOL营销 时尚行业…

finalshell创建和使用

1、下载安装 下载地址Finalshell SSH工具,业界最强大的SSH客户机 2、创建连接 点击文件夹新建连接

Struts2 系列漏洞 - S2-003、S2-005

一、前言 前面一篇文章也有提到 struts2 在进入 action 进行逻辑处理前&#xff08;以及逻辑处理后&#xff09;&#xff0c;会进入 18 个拦截器栈中对请求进行必要的处理&#xff08;如果没有自定义拦截器的话&#xff0c;可以在 struts-default.xml 中找到相应的拦截器栈&am…

【学习笔记】使用gcc编译程序并检查依赖的库

编译 gcc echo.c -o app -lfcgi-o app&#xff1a;指定编译后的输出文件名为 app。 -lfcgi&#xff1a;告诉编译器链接 FastCGI 库。 检查 ldd appldd 是一个在 Unix 和类 Unix 系统中用来打印一个已编译的程序所依赖的共享库列表的命令。当你运行 ldd app 命令时&#xff0…

Windows 10 中添加 开机启动 自动运行的程序

Win R 输入 “shell:startup” &#xff0c;回车确定 把 应用的 快捷方式 复制到文件夹中。就会自动开机启动了 参照图&#xff1a;

VLAN配置实验

目录 一、概述 二、组网 三、配置 四、验证 一、概述 以太网是一种基于CSMA/CD的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。 通过交换机可以解决LAN互连虽然可以解决冲突严重的问题&#xff0c;但是仍…

Redis 搭建主从复制、哨兵模式【Windows】

Redis 主从复制模式是一种用于数据冗余和可伸缩性的机制&#xff0c;它允许从服务器&#xff08;Slave&#xff09;从主服务器&#xff08;Master&#xff09;复制数据&#xff0c;从而实现数据的备份和读写分离。以下是关于Redis主从复制模式的详细介绍&#xff1a; 1. 主从复…

电脑U盘管理软件有哪些?精选四款适合企业的U盘管理软件

在当前的数字化时代&#xff0c;电脑U盘作为重要的数据存储和传输工具&#xff0c;其管理显得尤为关键。为了确保U盘数据的安全性和完整性&#xff0c;许多企业和个人都选择使用专业的U盘管理软件。以下是几款值得推荐的电脑U盘管理软件&#xff0c;包括域智盾在内&#xff0c;…

Python网络爬虫4-实战爬取pdf

1.需求背景 爬取松产品中心网站下的家电说明书。这里以冰箱为例&#xff1a;松下电器-冰箱网址 网站分析&#xff1a; 第一步&#xff1a; 点击一个具体的冰箱型号&#xff0c;点击了解更多&#xff0c;会打开此型号电器的详情页面。 第二步&#xff1a;在新打开的详情页面中…

阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介

一、分类 在UNIX或Liunx下主要有4中IO模型 阻塞IO:最简单、最常用、效率最低 阻塞IO简介和代码示例-CSDN博客当进程执行读操作的时候&#xff0c;如果缓冲区有内容&#xff0c;则继续读取内容向下执行。缓冲区没内容&#xff0c;进程进入休眠态&#xff0c;直到缓冲区中再次…

老徐亲自带队死磕 30 天 IP 公众号价值写作, 邀请你一起玩

* 大家好&#xff0c;我是前端队长。前端程序员&#xff0c;2023年开始玩副业。做过AI绘画&#xff0c;公众号 AI 爆文&#xff0c;AI代写项目&#xff0c;累计变现五位数。 — 老徐的一人企业书籍提到一点&#xff1a;120、完全没基础的同学&#xff0c;玩副业&#xff0c;玩 …

springboot连接多个库

一个SpringBoot项目&#xff0c;同时连接两个数据库&#xff1a;比如一个是Mysql数据库&#xff0c;一个是oracle数据库&#xff08;啥数据库都一样&#xff0c;连接两个同为oracle的数据库&#xff0c;或两个不同的数据库&#xff0c;只需要更改对应的driver-class-name和jdbc…

视觉SLAM14精讲——相机与图像3.2

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.2 视觉SLAM14精讲畸变有关重投影误差缩放实际使用 畸变 相机畸变是相机镜头光学缺陷所致的缺陷&#xff0c; 在光学领域这种问题是没…

Apple Intelligence:一文详细解读苹果AI!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

更适合工程师和研究僧的FPGA专项培训课程

各位编程精英er~ 社区打造的FPGA工程师培训班上线后&#xff0c;有不少同学后台私信询问&#xff1a;“能不能出个那种专门针对某个知识点的课程呢&#xff1f;我想针对自己的薄弱点深入学习。” 贴心如我&#xff0c;当然会满足大家的学习需求啦。本周&#xff0c;社区FPGA专…

Anime Girls Pack

动漫女孩包 35个动画&#xff08;就地&#xff09;支持人形。 8情绪。 角色列表&#xff1a;原艾艾琪惠美子惠理文子星薰和子佳子奈子理子凛老师小樱老师津雨僵尸女孩01 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

《维汉翻译通》App的OCR识别技术难度怎么样?通过哪些优化措施来提高文字识别的准确率呢?

《维汉翻译通》App的OCR技术在处理不同字体和大小的文本时&#xff0c;采用了以下优化措施来确保高准确率&#xff1a; 多字体支持&#xff1a;OCR引擎能够识别多种字体样式&#xff0c;包括常见的印刷体和手写体&#xff0c;以及一些特殊的艺术字体。 自适应缩放&#xff1a…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤&#xff0c;参考&#xff1a;Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

JVM (二)类加载

一&#xff0c;类的生命周期 加载 连接 验证 准备 解析 初始化 使用 卸载 加载、验证、准备和初始化这四个阶段发生的顺序是确定的&#xff0c;而解析阶段则不一定&#xff1b; 类加载几个阶段按顺序开始&#xff0c;而不是按顺序进行或完成&#xff0c;通常都会交叉进…