代码随想录day25

news2024/10/7 18:31:12

216. 组合总和 III

 

 这道题和昨天的相似的地方,但是也有不同的特点。这道题规定了数字范围是从1-9,并且一个组合中,不能出现同样的元素,比如说[1,2,2]这个就不可以,如果取过2之后,就只能往后找。

这就导致这里会比昨天多一个剪枝的操作。如果当前的path已经达到了k的长度,但是不满足和等于n,那么就pop出来并且减掉当前的元素。如果当前既满足长度,也满足和相等,那么就加入到我们的答案数组中。

递归三部曲:

        终止条件:当path的长度满足k并且和等于n的时候,加入到答案数组中

        递归参数:n代表目标和,k代表path长度,start代表下一层循环从第哪个元素开始,还有一个target_sum代表当前元素总和 

        单层递归逻辑:对于每一个元素进行相加,用target_sum储存直到满足长度k为止,如果不满足那么就pop并减掉当前元素然后从下一个元素开始

代码:

def combinationSum3(self, k: int, n: int) -> List[List[int]]:
        path = []
        result = []
        def  backtracking(sum_num,k,start,n):
            
            if len(path)==k:
                if sum_num==n:
                    result.append(path[:])
                    return 
            for i in range(start,10):
                sum_num +=i 
                path.append(i)
                backtracking(sum_num,k,i+1,n)
                path.pop()
                sum_num-=i 
        backtracking(0,k,1,n)
        return result

Leetcode17电话号码的字母组合

17. 电话号码的字母组合 - 力扣(Leetcode)

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

 

最最最最暴力的方法,for循环嵌套。或者直接用python的内置函数iteral.product求笛卡尔乘积,学过sql的朋友应该不陌生,这道题就是类似sql的join然后求笛卡尔乘积

但是我们开始了回溯算法的章节,那么肯定要用回溯来写!

思路:首先需要创一个哈希表,数字和他所映射的字母 一 一 对应

        然后依旧是转化为树形结构来看,如下图!

        

树的深度就是当前digits的长度,而最后的叶子节点就是我们要收集的结果,那么回溯出现在哪里呢?是不是最后一层找完了我们要继续回到上一层去找。

 递归三部曲:

        终止条件:如果index==len(digits),index就代表当前遍历的位置,如果index等于了当前digits的长度,那么就加入结果集并return

        递归参数:首先需要一个字符串s来收集叶子节点的结果,然后用一个字符串数组result保存。也就是:s,digits,index

        单层循环逻辑:首先找到当前要遍历digits中字母的位置,也就是map[digits[index]],index从0开始,获取到了第一个数字 然后再map中找到了这个数字映射的字母

  for循环对这个数字指向的字母,s+=i,因为s是字符串哈!我们最后传入的时候是一个" ".

然后开始递归下一层,这里递归了之后是需要返回到上一层的,也就是s = s[:-1],这个就代表我们回溯到上一层的字母。然后继续遍历其他的字母。

这里递归我讲一下,主要是熟悉这个思路,至于递归里面的过程真的没有必要去扣出来,因为一不小心就会绕进去然后出不来,虽然我每次都被绕进去。。。。。

代码:

 def letterCombinations(self, digits: str) -> List[str]:
        result = []
        def backtrace(digits,index,s:str):
            map ={  '2':'abc',
                    '3':'def',
                    '4':'ghi',
                    '5':'jkl',
                    '6':'mno',
                    '7':'pqrs',
                    '8':'tuv',
                    '9':'wxyz'}
            if not digits:
                return []
            if index==len(digits):
                result.append(s)
                return 
            letters = map[digits[index]]
            for letter in letters:
                s+=letter 
                backtrace(digits,index+1,s)
                s=s[:-1]
        backtrace(digits,0,'')
        return result 

        

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

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

相关文章

在Visual C++中进行类设计的通行做法(下)——类的运行

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下在Visual C中进行类设计的通行做法,这一篇帖子来看看在搭建好基本架构并调整好重复定义问题后,怎么个运行法。程序员新手会去看很多书,但是书中往往…

安装centos7 ping不通宿主机

1、安装Virbox虚拟机 2、安装centos 7镜像 主要有两点配置需要注意: A:磁盘分区 B:网络设置,今天的实验主要是卡在网络配置这里 网络设置,使用的是仅主机模式且是手动分配静态IP,要点说明 看宿主机所用的网络是哪个,查看window的…

OC时钟/BC时钟介绍、Windows/Linux环境查看时钟频率

一、OC时钟和BC时钟介绍 OC时钟和BC时钟是指计算机体系结构中的两种不同的时钟信号。 OC时钟(Off-chip clock)是指在计算机系统的主板或外部设备上产生的时钟信号,它通过总线传输到CPU中,控制着CPU与主板或外部设备之间的数据传…

Vue简介、生命周期、模版语法、条件渲染、列表渲染、style和class绑定

目录 简介 Vue基本渲染-插值和数据模型 MVVM 生命周期 模版语法 条件渲染 v-if ​编辑 v-show 列表渲染 key style绑定 class绑定 简介 Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只…

Docker 多主机部署:构建容器集群的最佳实践,助力高可用性与负载均衡

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

加载Ubuntu开发环境-iTOPRK3568开发板

配套视频: 安装虚拟机 ubuntu 系统:B站搜索北京迅为RK3568开发板 在 2.3 小节解压了迅为提供的 ubuntu 镜像,然后打开虚拟机,如下图所示: 点击上图中的红色框,选择在 2.3 小节中解压的 Ubuntu18 文件夹下…

oracle单个用户最大连接数限制

项目经理反馈,现场已做了单个用户的最大连接数2000的限制,但数据库还是报无法连接,故障用户的连接数已3800多了。 查看日志报错如下 2023-07-20T13:07:57.79465308:00 Process m000 submission failed with error 20 Process m000 submiss…

Matlab对FS32K144编程--串口通讯

1、配置系统运行周期10ms 2、设置串口通讯通道为通道1,波特率设为9600 3、设置串口发送-100ms发送一次 4、设置接收中断接收数据 5、编译下载,串口发送消息

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…

共享汽车管理系统nodejs+vue

语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 前端nodejsvueelementui, 共享汽车管理系统的系统管理员可以管理用户,可以对用户信息修改删除以及查询操作。具体界面的展…

JQ-3 jQuery事件处理(click和on的区别、事件冒泡、事件对象、事件委托、小案例); jQuery动画(常见动画函数、动画队列、小案例)

目录 1_ jQuery事件处理1.1_认识事件(Event)1.2_click和on的区别1.3_ jQuery的事件冒泡1.4_jQuery的事件对象( Event Object)1.5_ jQuery的事件委托(event delegation)1.6_ jQuery常见的事件1.7_小案例 2_ jQuery 动画2.1_介绍2.2…

【力扣每日一题】2023.7.23 接雨水

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 接雨水是力扣里非常经典的一道单调栈的题目,使用单调栈的做法就是从左到右将高度依次入栈,保持栈内从栈顶…

《零基础入门学习Python》第060讲:论一只爬虫的自我修养8:正则表达式4

有了前面几节课的准备,我们这一次终于可以真刀真枪的干一场大的了,但是呢,在进行实战之前,我们还要讲讲正则表达式的实用方法和扩展语法,然后再来实战,大家多把持一会啊。 我们先来翻一下文档:…

【iOS安全】iOS 14.3越狱教程

iOS 14.3越狱教程 通过MacBook越狱iPhone 8 方案:AltStore unc0ver 实验环境 手机:iPhone 8 OS版本:iOS 14.3 型号号码:A1863 PC型号:MacBook 实验步骤 Mac安装AltServer https://altstore.io/ 解压后启动 …

【ES】---ES的聚合(aggregations)

目录 一、前言1、聚合分类2、聚合的实现方式二、RestAPI--bucket聚合案例11、按照类型分bucket2、按照(String)时间分bucket三、RestAPI-- metric聚合案例11、metric指标统计四、RestAPI-- pipeline聚合案例1一、前言 聚合是对文档数据的统计、分析、计算。 注意:参与聚合的字…

Clion开发STM32之W5500系列(NTP服务封装)

概述 在w5500基础库中进行封装,获取服务端的时间,来校准本地时间。本次使用的方案是通过ntp获取时间定时器更新保证时间准确。 NTP封装 头文件 /*******************************************************************************Copyright (c) [sc…

【动态规划part03】| 343.整数拆分、96.不同的二叉搜索树

目录 🎈LeetCode343.整数拆分 🎈 LeetCode96.不同的二叉搜索树 🎈LeetCode343.整数拆分 链接:343.整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些…

S32K1xx SDK(版本:S32_SDK_S32K1xx_RTM_4.0.3 )详细介绍

前言 在学习一款MCU之前,一般我的习惯是先下载官方提供的SDK包进行学习。然后学习了解SDK提供的资源、框架、以及各目录结构文件作用等,下面边学边做笔记记录。 S32K1系列SDK我们可以到下面的NXP官网去获取: https://www.nxp.com.cn/design…

数据库备份还原-mysqldump、mydumper、xtrabackup、压缩

数据库备份,数据库为school,素材如下 一、创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARC…

Windows bat 查找文件被哪个进程占用,并终止该进程

一、背景 我有个批处理脚本如下: echo off chcp 936 & cls cd /D F:\Chen\python3\ExciseC set fdate%date:~0,4%%date:~5,2%%date:~8,2% python main.py >> crawl_record_%fdate%.log 2>&1 for /F %%f in (dir crawl_record_*.log /B ^| find /…