【LeetCode】升级打怪之路 Day 25:回溯算法解决“排列-组合-子集”问题

news2025/7/8 0:07:10

今日题目:

  • 78. 子集
  • 77. 组合
  • 46. 全排列
  • 90. 子集 II
  • 47. 全排列 II
  • 39. 组合总和

目录

      • 1. 子集(元素无重不可复选) 【easy】
      • 2. 组合(元素无重不可复选)
      • 3. 排列(元素无重不可复选) 【classic】
      • 4. 子集/组合(元素可重不可复选)【稍有难度】
      • 5. 排列(元素可重不可复选)
      • 6. 子集/组合(元素无重可复选)

无论是排列、组合还是子集问题,简单说无非就是让你从序列 nums 中以给定规则取若干元素。但无论形式怎么变化,其本质就是穷举所有解,而这些解呈现树形结构,所以合理使用回溯算法框架,稍改代码框架即可把这些问题一网打尽

记住,在运用回溯算法来解决问题时,一定要用手画一下回溯树的构建思路,也就是说弄清楚在每一步如何做出选择以及递归结束的条件是什么。

1. 子集(元素无重不可复选) 【easy】

78. 子集

这个题目就很基本了,前面也做过,难度不大。

2. 组合(元素无重不可复选)

77. 组合

根据题目背景,确定好每次可以做的选择有哪些和递归结束的条件。难度也不大。

3. 排列(元素无重不可复选) 【classic】

46. 全排列

这个题目在 排列(元素无重不可复选)| labuladong 文章中借助于 used 巧妙地实现了标准全排列,值得参考学习。同时这篇文章提出的实现元素个数为 k 个的排列的方法也值得学习。

4. 子集/组合(元素可重不可复选)【稍有难度】

90. 子集 II

这个题目让返回 nums 的所有可能子集,且这些子集之间不能重复。注意 [1, 2, 2][2, 2, 1] 其实是同一个集合,是算作重复的,题目给的示例:

LC 90 示例

如果 nums 中没有重复元素的话,做这个题目的思路就是:在 backtrace 做选择时,每个元素有“选”和“不选”两种选择,从而得到所有的子集。

但如果 nums 中有重复元素的话,这个做法就有问题了,比如示例的 nums = [1, 2, 2],选第一个 2 不选第二个 2 是一种情况,不选第一个 2 选第二个 2 也是一种情况,但这两种情况得到的结果重复了,为了解决这个重复问题,我们就不让后者情况出现,也就是当第一个 2 选了之后,我们就绝对不再选第二个 2。具体代码实现就是,当检查到当前元素与前面重复且前面元素没有选的时候,当前元素就只有“不选”这一个选择了,如下所示:

only-false
这里还有一个小坑,为了能够实现重复检测,我们这里需要事先对 nums 进行排序,从而让重复的元素能够聚在一块:

sort

5. 排列(元素可重不可复选)

47. 全排列 II

也是 nums 中可能包含重复数字,且答案集合不允许重复。我这里投机取巧了,直接将 result 声明为 HashSet 从而实现过滤重复元素。

这里可以这样做的原因是,题目认为的答案重复的元素,HashSet 也会认为是重复从而过滤掉,但上个题目却不是,题目认为的答案重复的元素,HashSet 却不一定认为是重复,比如 [1, 2, 2][2, 2, 1]。这也是这个题可以投机取巧而上个题目不行的原因。

6. 子集/组合(元素无重可复选)

39. 组合总和

也是事先排序,这个题目的新颖点在于,每一次可以做的选择是不能事先确定的,而是动态计算出来的。理清好思路后难度也不大。

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

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

相关文章

Geostationary IR Channel Brightness Temperature - GridSat B1 -- shell下载

进入网页 https://www.ncei.noaa.gov/products/gridded-geostationary-brightness-temperature 然后进入数据目录,通过https的方式进行下载: 点击后进入如下界面: 点击任意年份进行下载 这里以2004年为例,如下所示&#xff1…

管道(acwing,蓝桥杯,二分)

题目描述: 有一根长度为 len 的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。 一开始管道是空的,位于 Li的阀门会在 Si 时刻打开,并不断让水流入管道。 对于位…

group by和min、max函数一起使用

原始数据 查询每科的最高分数 -- 查询每科最高分数 select stuId,classId,stuName,max(score) from student_score group by classId 错误的结果 这个显然不是对的,或者说不是我们想要的结果, 我们想要的结果是 原因是什么呢?我们知道使用…

【nfs报错】rpc mount export: RPC: Unable to receive; errno = No route to host

NFS错误 问题现象解决方法 写在前面 这两天搭建几台服务器,需要使用nfs服务,于是六台选其一做服务端,其余做客户端,搭建过程写在centos7离线搭建NFS共享文件,但是访问共享时出现报错:rpc mount export: RPC…

014 Linux_同步

​🌈个人主页:Fan_558 🔥 系列专栏:Linux 🌹关注我💪🏻带你学更多操作系统知识 文章目录 前言一、死锁(1)死锁概念 二、同步(1)同步概念&#xff…

Java面试题总结18之springcloud四种分布式事务解决方案

XA规范:分布式事务规范,规定了分布式事务模型 四个角色:事务管理器(协调者TM),资源管理器(参与者RM),应用程序AP,通信资源管理器CRM 全局事务:一…

微信小程序小白易入门基础教程1

微信小程序 基本结构 页面配置 页面配置 app.json 中的部分配置,也支持对单个页面进行配置,可以在页面对应的 .json 文件来对本页面的表现进行配置。 页面中配置项在当前页面会覆盖 app.json 中相同的配置项(样式相关的配置项属于 app.js…

QML | JavaScript作用域和命名解析

#1 JavaScript作用域和命名解析 QML属性绑定、内联函数和导人的JavaScript文件都运行在一个JavaScript作用域中。作用域主要控制两点:一是表达式可以访问哪些变量;二是当两个或多个名字冲突时,哪个变量优先。由于JavaScript的内建作用域机制非常简单,QML对其进行了加强,使…

java实现kml文件下载接口

根据业务需求,需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 package com.kyrielx.kmzdemo.controller;import org.apache.commons.io.FileUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org…

3/13/24运算符、补码、整型、浮点型、汇编

目录 三目运算符 逗号运算符 自增自减运算符 位运算 运算符优先级 补码讲解 整型解析 溢出解析 浮点数IEEE754标准解析 浮点数精度丢失 真题 汇编指令 生成汇编方法 常用指令 三目运算符 条件运算符是C语言中唯一的三目运算符。通过判断问号之前的表达式的真假&…

linux之权限管理和组

一,ACL权限 1.1,什么是acl权限? ACL是Access Control List的缩写,即访问控制列表。可以通过下列的实例来理解ACL的作用: 思考如何实现如下的权限控制: 每个项目成员在有一个自己的项目目录,…

网工内推 | 信息安全主管,CISP认证优先,最高25K,加绩效提成

01 福建省数字福建云计算运营有限公司 招聘岗位:网络及信息安全主管 职责描述: 1.负责带领IT运维团队,对公司网络与安全整体架构规划,设计、运营及IT设备的全生命周期运维规划等; 2.负责对网络、网络安全的日常运维管…

【JavaScript】JavaScript 程序流程控制 ① ( 顺序流程控制 | 分支流程控制 )

文章目录 一、JavaScript 程序流程控制简介1、顺序流程控制2、分支流程控制3、分支流程控制 - 代码示例 一、JavaScript 程序流程控制简介 JavaScript 程序 执行过程中 , 不同的代码执行顺序 , 得到的结果是不同的 , 在编程中 经常 需要 根据 不同的条件 执行不同的代码块 , 或…

计算机缺失msvcp110.dll如何修复,多种修复方法教给你

当电脑系统中msvcp110.dll文件丢失时,可能会对计算机的正常运行产生一系列显著的影响。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分,这个动态链接库文件对于许多基于Windows的应用程序至关重要,尤其是一些使用C编译器…

2024蓝桥杯每日一题(回溯)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:木棒 试题二:n皇后问题 试题三:糖果 试题四:飞机降落 试题五:生日蛋糕 试题一:木棒 【问题描述】 乔治拿来一组等长…

【工具】Mermaid + 大模型画流程图

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 引入使用画TCP三次握手了解历史人物 总结 引入 最近看面试文章关于TCP三次握手和…

PTA L2-021 点赞狂魔

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这…

好委屈,东方甄选为何总是被供应商骗?

东方甄选最近很委屈。 315晚会过后,知名打假人王海爆料,称315晚会曝光的槽头肉扣肉在东方甄选和小杨哥的直播间里销售过。 东方甄选赶忙去问了问供应商情况。 供应商的回答让他感到暖心,表示虽然315晚会曝光了我们公司违规使用糟头肉&…

Pulsar IO实战

一、引言 今天跟着 官方文档 基于docker玩一把Pulsar IO吧 二、概要 在用户能够轻松的将消息队列跟其他系统(数据库、其他消息系统)一起使用时,消息队列的作用才是最强大的。而Pulsar IO connectors可以让你很轻松的创建、部署以及管理这些跟外部系统的连接&#…

Golang 开发实战day04 - Standard Library

Golang 开发实战day04 - Standard Library 接下来开始我们第四天学习,Go语言标准库提供了丰富的功能,可以帮助开发者快速完成各种任务。 golang就像其他语言一样,附带了一些非常轻量级的函数和特性,都是开箱即用的,这里…