【回溯】总结

news2024/11/25 19:14:00

1、 组合和子集问题

组合问题需要满足一定要求才算作一个答案,比如数量要求(k个数),累加和要求(=target)。
子集问题是只要构成一个新的子集就算作一个答案。

进阶:去重逻辑。

  1. 一般都是要对同层去重。比如[1,1,2,2,2]
    放置第一个位置的数时,如果已经使用过第一个1了,那么他的所有组合和子集一定包含第二个1,所以去重逻辑就是同层不能出现相同的数
  • 对于一个顺序数组,通常直接与前一个数比较即可。
for i in range(index+1, n):
	if i==index+1 or nums[i]!=nums[i-1]:
		dfs(i,[],target)
  • 对于一个乱序数组,则需要用哈希表存储同层出现过的数。
hash = set()
for i in range(index+1, n):
    if i==index+1 or (nums[i] not in hash):
        hash.add(nums[i])
        dfs(i, [])
  1. 实际上上面的两段代码还蕴含了另一个去重,即不同层不能用同一个下标的数,所以这里索引时是从index+1开始

2、分割问题

我们定义[start:end] **(左闭右闭)**这段区间为分割出来的子串,对他进行条件判断。在python中对应的是s[start: end+1],end指向某个字符后面,表示切割到这个字符。start则为上一步的end+1。可以看下面这幅图,比较直观。理解了怎么分割字符串,剩下的就套回溯的模板就可以了。
在这里插入图片描述

    def partition(self, s: str) -> List[List[str]]:
        n = len(s)
        res = []

        def ishuiwen(s):
            return s==s[::-1]

        def dfs(start,end,stack):
            ss = s[start:end+1]
            if not ishuiwen(ss):
                return
            stack.append(ss)
            if end == n-1:
                res.append(stack.copy())
                return 
            
            for i in range(end+1,n):
                dfs(end+1, i, stack.copy())
            
        for i in range(n):
            dfs(0, i, [])
        return res

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

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

相关文章

星际争霸之小霸王之小蜜蜂(二)--类的使用

目录 前言 一、将设置内容写在一个类里 二、设置小蜜蜂的造型 三、设置猫蜜蜂的参数 四、绘制猫蜜蜂到窗口 总结 前言 昨天我们设置好了窗口,下面我们需要向窗口中添加元素了。 一、将设置内容写在一个类里 我个人理解书上的意思是要创建一个类,将所有需…

厘米级定位技术主要有以下几种

厘米级定位技术主要有以下几种: 1.UWB (Ultra-Wideband) 定位技术:UWB技术使用一组频带非常宽的无线电脉冲来实现高精度定位,可以实现亚米级的定位精度,甚至在理想条件下可以达到厘米级的定位精度。 2.RTK (Real-Time Kinematic…

python3 0基础学习----基本知识

0基础学习笔记之基础知识 📚 基础内容1. 条件语句 if - elif - else2. 错误铺捉try - except(一种保险策略)3. 四种开发模式4. 函数:def用来定义函数的5. 最大值最小值函数,max ,min6. is 严格的相等,is no…

Vault主题 - UiCore多用途Elementor WordPress主题

你可以使用Vault主题 – UiCore多用途Elementor WordPress主题构建什么? Vault主题拥有专业、像素级完美且干净的现代布局,几乎适合您需要的任何网站: 小型企业网站企业网站着陆页面权威博客销售和营销页面网上商店 自由职业者的最佳选择 …

VM——流程自动连续运行

1、需求:使用一个流程连续运行,充当独立线程,监控外部IO输入。 2、方法:某个流程连续运行,需要在界面设置控制按钮,这不符合要求。需要程序启动后自动连续运行。咨询海康技术人员、网上查资料后&#xff0…

JS逆向-某招聘平台token

前言 本文是该专栏的第56篇,后面会持续分享python爬虫干货知识,记得关注。 通常情况下,JS调试相对方便,只需要chrome或者一些抓包工具,扩展插件,就可以顺利完成逆向分析。目前加密参数的常用逆向方式大致可分为以下几种,一种是根据源码的生成逻辑还原加密代码,一种是补…

双向-->带头-->循环链表

目录 一、双向带头循环链表概述 1.什么是双向带头循环链表 2.双向带头循环链表的优势 3.双向带头循环链表简图 二、双向带头循环链表的增删查改图解及代码实现 1.双向带头循环链表的头插 2.双向带头循环链表的尾插 3.双向带头循环链表的头删 4.双向带头循环链表的尾删…

使用Pillow对图像进行变换

使用Pillow对图像进行变换 from PIL import Image, ImageEnhance# 原图 image Image.open("1.jpg") image.show()# 镜像 mirrored_image image.transpose(Image.FLIP_LEFT_RIGHT) mirrored_image.show() mirrored_image.save(mirror_image.jpg)# 旋转 rotated_imag…

day12 13-牛客67道剑指offer-JZ83、70、63、47、48、46、21、81

1. JZ83 剪绳子&#xff08;进阶版&#xff09; class Solution { public:int jumpFloorII(int number) {if(number < 1) return number;int temp 1;int res 0;/*2级台阶 23级台阶 44级台阶 65级台阶 16*/for(int i2; i<number; i){res 2 * temp;temp res;}return re…

ts与vue

ts与Vue 如果你已经学习了typeScript,但不知道如何在vue项目中使用&#xff0c;那么这篇文章将会很适合你。参考千峰教育 kerwin视频 1.会自动推导&#xff0c;隐士推导。提示 类型系统。 独立模块。 isolatedModules选项&#xff1a;是否配置为独立的模块。 减少报错 let …

innodb索引与算法

B树主键插入 B树在innodb的插入有三种模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B树就是page_N_direction,如果是自增主键的话&#xff0c;就是上面这样的插入法 FIC优化 (DDL) 选择性统计 覆盖索引 MMR ICP优化 自适应hash 全文索引

乖宝宠物上市,能否打破外资承包中国宠物口粮的现实

近日&#xff0c;乖宝宠物上市了&#xff0c;这是中国宠物行业成功挂牌的第三家公司。同时&#xff0c;昨日&#xff0c;宠物行业最大的盛事“亚洲宠物展”时隔3年&#xff0c;于昨日在上海成功回归。 这两件事情的叠加可谓是双喜临门&#xff0c;行业能够走到今天实属不易&…

09- DMA(DirectMemoryAccess直接存储器访问)

DMA 09 、DMA(DirectMemoryAccess直接存储器访问)DMA配置流程 09 、DMA(DirectMemoryAccess直接存储器访问) DMA配置流程 dma.c文件 main.c文件 详见《stm32中文参考手册》表57。

c++--SLT六大组件之间的关系

1.SLT六大组件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函数&#xff0c;适配器&#xff0c;空间配置器 2.六大组件之间的关系 容器&#xff1a;容器是STL最基础的组件&#xff0c;没有容器&#xff0c;就没有数据&#xff0c;容器的作用就是用来存…

java版本spring cloud 企业工程系统管理 工程项目管理系统源码em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

打印出二进制的奇数位和偶数位

void print(int a) {int i0;printf("奇数位&#xff1a;");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶数位&#xff1a;");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …

Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 这篇博客试图根据一些常见的可量化指标&#xff0c;为您选择适合您用例的生成式人工智能方法提供指导。 生成式 AI 正在以惊人的速度发展&#xff0c…

PyCharm连接Docker中的容器(ubuntu)

一、为什么要用Pycharm链接Docker中的ubuntu 因为在进行深度学习的时候&#xff0c;基于windows系统在开发的过程中&#xff0c;老是出现很多问题&#xff0c;大多数是环境问题。 尽管安装了Conda&#xff0c;也不能很好的解决问题&#xff0c;使用ubuntu是最好的选择。 二、…

MySql过滤重复数据

假设模型表是: 1. 根据单字段过滤: SELECT user_name, COUNT(*) as count FROM sys_user GROUP BY user_name HAVING count > 1;结果: 2. 根据多个字段查询重复数据 SELECT user_name, email, COUNT(*) as count FROM sys_user GROUP BY user_name, email HAVING count…

Qt平滑弹出页面

目标功能&#xff1a; (1)按下btn&#xff0c;弹出绿色页面。 (2)按下btn2,绿色页面隐藏。 (3)按下左边余下的区域&#xff0c;绿色页面也隐藏。 (4)平滑地显示和隐藏 效果&#xff1a; form.h #ifndef FORM_H #define FORM_H#include <QWidget>namespace Ui { class…