【日常系列】LeetCode《23·回溯2》

news2024/9/29 1:24:24

数据规模->时间复杂度

<=10^4 😮(n^2)
<=10^7:o(nlogn)
<=10^8:o(n)
10^8<=:o(logn),o(1)

内容

lc 401 :二进制手表
https://leetcode.cn/problems/binary-watch/
提示:
0 <= turnedOn <= 10

class Solution:
    def readBinaryWatch(self, turnedOn: int) -> List[str]:
        nums1 = [8, 4, 2, 1]
        nums2 = [32, 16, 8, 4, 2, 1]
        #
        res=[]
        for i in range(turnedOn+1): #例如0:15
            hours,minutes=self.findcombs(nums1,i),self.findcombs(nums2,turnedOn-i)
            for hour in hours:
                if hour>11:continue
                for minute in minutes:
                    if minute>59:continue
                    minute_str='0' + str(minute) if minute<10 else str(minute)
                    res.append(str(hour)+':'+minute_str)
        return res
    
    def findcombs(self,nums,cnt):
        combs=[]
        self.dfs(nums,cnt,0,0,combs)
        return combs
    
    def dfs(self,nums,cnt,sum,startindex,combs):
        if cnt==0:
            combs.append(sum)
            return

        for i in range(startindex,len(nums)):
            self.dfs(nums,cnt-1,sum+nums[i],i+1,combs) #’组合层‘

lc 131【剑指 086】 :分割回文串
https://leetcode.cn/problems/palindrome-partitioning/
提示:
1 <= s.length <= 16
s 仅由小写英文字母组成

在这里插入图片描述

class Solution:
    def partition(self, s: str) -> List[List[str]]:
        path=[]
        self.res=[]
        self.dfs(s,0,path)
        return self.res
    
    def dfs(self,s,startindex,path):
        if startindex==len(s):
            self.res.append(path[:])
            return
        
        for i in range(startindex,len(s)):
            if not self.is_partition(s,startindex,i):continue
            #
            path.append(s[startindex:i+1])
            self.dfs(s,i+1,path)
            path.pop()
    
    def is_partition(self,strs,left,right):
        while left<right:
            if strs[left]!=strs[right]:
                return False
            left,right=left+1,right-1
        return True

lc 79 【剑指 12】【top100】: 单词搜索
https://leetcode.cn/problems/word-search/
提示:
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board 和 word 仅由大小写英文字母组成

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        dirs=[[-1,0],[1,0],[0,-1],[0,1]]
        rows,cols=len(board),len(board[0])
        visited=[[False]*cols for _ in range(rows)]
        #
        def dfs(row,col,index):
            if board[row][col] != word[index]:return False
            elif index==len(word)-1:return True

            visited[row][col]=True
            for d in dirs:
                nextrow=row+d[0]
                nextcol=col+d[1]
                if 0<=nextrow<rows and 0<=nextcol<cols and not visited[nextrow][nextcol]:
                    if dfs(nextrow,nextcol,index+1):return True
            ##回溯
            visited[row][col]=False #key:运行到这,说明dfs(nextrow,nextcol,index+1)返回False,要撤回,回溯
            
        #
        for row in range(rows):
            for col in range(cols):
                if board[row][col]==word[0]:#遍历起始点
                    if dfs(row,col,0):
                        return True
        return False

lc 301【top100】:删除无效的括号
https://leetcode.cn/problems/remove-invalid-parentheses/
提示:
1 <= s.length <= 25
s 由小写英文字母以及括号 ‘(’ 和 ‘)’ 组成
s 中至多含 20 个括号

在这里插入图片描述

class Solution:
    def removeInvalidParentheses(self, s: str) -> List[str]:
        queue=deque()
        visited=set()
        res=[]
        #
        queue.append(s)
        visited.add(s)
        level_find=False #如当前层存在有效字符,break->保证删除最小数量
        while queue:
            #处理当前层
            for i in range(len(queue)):
                curr_strs=queue.popleft()
                if self.is_valid(curr_strs):
                    res.append(curr_strs)
                    level_find=True
                    continue

                #下一层准备(删-j位)
                for j in range(len(curr_strs)):
                    if curr_strs[j] != '(' and curr_strs[j] != ')':continue #key:存在字母
                    left_strs=curr_strs[0:j]
                    right_strs=curr_strs[j+1:len(curr_strs)] if j != len(curr_strs)-1 else ''
                    next_strs=left_strs+right_strs
                    if next_strs not in visited:
                        visited.add(next_strs)
                        queue.append(next_strs)
            #key
            if level_find:break
        return res

    def is_valid(self,strs):
            cnt=0
            for c in strs:
                if c=="(":cnt+=1
                elif c==')':cnt-=1
                #
                if cnt<0:return False
            return cnt==0

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

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

相关文章

java jvm详解

java 系列文章之JVM 文章目录java 系列文章之JVM一、JVM1.基本概念2.运行过程二、线程三、JVM 内存区域1. 程序计数器(线程私有)2. 虚拟机栈(线程私有)3. 本地方法区(线程私有)4. 堆&#xff08;Heap-线程共享&#xff09;-运行时数据区5. 方法区/永久代&#xff08;线程共享&a…

UE4.27 C++调用DLL

1.首先在UE C项目中添加一个x64动态链接库&#xff0c;取名RouteInterface,放到Source下面&#xff1b; 2.在Source下面新建两个文件夹Include和Lisbs,这两个文件夹用来保存库的头文件和lib文件 3.在项目RouteInterface下面添加一个类&#xff1a;TestDll,并且把头文件保存到…

Mybatis-Plus查询投影与查询条件设置

目录 查询投影 查询指定字段 聚合查询 分组查询 查询条件设置 等值查询 范围查询 模糊查询 排序查询 查询投影 目前我们在查询数据的时候&#xff0c;什么都没有做默认就是查询表中所有字段的内容而查询投影即不查询所有字段&#xff0c;只查询出指定内容的数据 查询指…

九、文件File、IO流

文件File File可以用来表示计算机中的文件或者文件夹官方定义&#xff1a;文件和文件夹路径名的抽象表示形式 3种构造 1File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例2File(String parent, String child) 从父路径名字符串和子路径名字…

2022硅谷大厂的大!失!败!AiDA时尚设计师助手;2023热门IT技能预告;Uber送货机器人;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f4e2; 『抖音』2022抖音热点数据报告&#xff0c;共度温暖岁末 抖音热点联合巨量算数&#xff0c;发布了《2022抖音热点数据报告》&#xff0c;盘点了20…

如何在pycharm上安装tensorflow

TensorFlow™是一个基于数据流编程&#xff08;dataflow programming&#xff09;的符号数学系统&#xff0c;被广泛应用于各类机器学习&#xff08;machine learning&#xff09;算法的编程实现&#xff0c;其前身是谷歌的神经网络算法库DistBelief 。 Tensorflow拥有多层级结…

qt 崩溃处理

Windows系统MSVC编译器的dump文件 debug模式 生成exe自带生成pdb文件&#xff0c;所以无需处理。 1.生成dump文件 通过修改注册表&#xff0c;增加注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps 具体见&#xff1a;利用vs 分…

Forrester Wave发布最新报告 腾讯云数据连接器评分卓越

全球权威研究机构 Forrester 在2022年12月8日最新发布的《中国公有云开发和基础设施平台&#xff0c;Q4 2022》报告中&#xff0c;腾讯云获得高分&#xff0c;位列“领导者象限”。Forrester在报告中提出&#xff1a;“企业在进行公有云开发和基设施平台提供商的选项中&#xf…

php宝塔搭建部署实战帮管客CRM客户管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的帮管客CRM客户管理系统源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xf…

商业智能BI中,业务质量分析和业务成本分析

最初谁也没有想到&#xff0c;信息化 、数字化技术及其应用能够在如此短时间内快速覆盖了社会的方方面面&#xff0c;如今人们的衣食住行和工作生活娱乐都离不开数字化、数据的身影。 数据分析&#xff0c;是离不开业务的&#xff0c;只有把业务研究好了&#xff0c;所做出的报…

Numpy 数组切片

一、列表切片&#xff08;一维数组&#xff09; 1.1、切片原理 列表切片是从原始列表中提取列表的一部分的过程。在列表切片中&#xff0c;我们将根据所需内容&#xff08;如&#xff0c;从何处开始&#xff0c;结束以及增量进行切片&#xff09;剪切列表。Python中符合序列的…

【论文阅读】Online Decision Based Visual Tracking via Reinforcement Learning

Online Decision Based Visual Tracking via Reinforcement Learning 概述 本文2020年发布于NeurIPS(CCF-A)。视觉跟踪通常基于目标检测或者模板区配&#xff0c;但它们都只适用于特定的场景或对象。因为它们遵循不同的跟踪原则&#xff0c;直接将它们融合在一起是不明智的。…

会话技术和JSP技术

会话技术&#xff1a;一次会话中包含多次的请求和响应 一次会话&#xff1a;浏览器第一次给服务器资源发送请求&#xff0c;会话建立&#xff0c;直到有一方断开为止 功能&#xff1a;在一次会话的范围内共享数据 方式&#xff1a; 1、客户端会话技术&#xff1a;Cookie 2、服务…

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。

我司赤城弘一CEO受邀参加东盟与中日韩中小企业人工智能产业论坛并做主旨发言。 一、活动背景 为推动东盟与中日韩&#xff08;103&#xff09;中小企业服务联盟务实合作&#xff0c;帮助中小企业提高生产力和技术创新能力&#xff0c;进一步提高国际化发展水平&#xff0c;促进…

Web前端期末大作业---新农村建设网页设计

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&#xff01;☀️ &#x1f525;前言 期末来咯&#xff0c…

Unity脚本(一)

视频教程&#xff1a;https://www.bilibili.com/video/BV12s411g7gU/?p112 目录 脚本 特性 控制台Console 脚本生命周期 Assembly-CSharp.dll 调试 Component 脚本 脚本是附加在游戏物体上用于定义游戏对象行为指令的代码&#xff0c;需要继承自MonoBehaviour类 编…

使用VTK和Python进行体绘制

使用VTK和Python进行体绘制IntroductionVolume Rendering1. Imports2. Helper-functions3.Options4. Image-Data Input5. Prep-work6. Volume RenderingIntroduction 科学可视化技术是运用计算机图形学、图像处理、计算机视觉等方法&#xff0c;将科学、工程学、医学等计算、测…

亚马逊跨境电商可靠吗?2023年还可以做吗?

新的一年新的打算&#xff0c;不少小伙伴在问&#xff0c;亚马逊跨境电商可靠吗&#xff1f;2023年还可以做亚马逊跨境电商吗&#xff1f;为此我们小编就来简单说说自己的想法吧&#xff01; 亚马逊跨境电商可靠吗&#xff1f; 【回答】&#xff1a;首先我们需要肯定一点的是&…

【Unity3D日常开发】Unity3D中屏蔽不想显示的黄色警告消息

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;会有一些脚本…

在vue项目中使用rem的完整步骤

首先要知道几个概念&#xff1a; 设计稿是物理像素&#xff0c;在移动端上是css像素&#xff0c;1css像素2物理像素/3物理像素&#xff1b; 要想实现一张设计稿的尺寸能在各个移动端上适配&#xff0c;因为不同的移动端的css像素和物理像素比不一样&#xff0c;所以固定的物理…