力扣题库刷题笔记7--N字型变换

news2024/11/17 12:59:52

1、题目如下:

2、个人Python代码实现:

        看到此题的第一反应就是,生成一个类似二维数组的多个字符串,然后用个标志位控制N字符中字符的方向,例如flag = True,在每次循环时候以flag = flag * -1来控制。

        由于示例中字符串s可能看的不是很确切,所以为了更好的理解,于是自定义了一个字符串

s = "ADINSXTOJEBFKPUYVQLGCHMRWZ",numRows = 6。这样其进行N字型变换后,会按照英文字母排序,接下来用Excel加深理解:

        以上图为例,原本的思路是根据numRows生成对应个数的字符串,“ABC”、“DEFGH”以此类推,最后将字符串求和,中间有个点是需要通过标志位控制字符方向。由于个人确实不擅长生成二维数组类似的操作,所以换个思路,采用循环的方式,也就是最初思路中生成的字符串个数,转换成循环次数即可。关于上图,做以下解释:

        a、表的行数代表了循环次数,循环次数的值也就是numRows,那么这里就会出现一个问题,每一次循环在字符串s中取多少个字符呢?取得字符个数可以理解为表里面有多少种颜色。

换种说法就是,外部循环次数为numRows,内部循环通过字符下标去判断循环次数,这里经过过观察,每一次内部循环次数其实是math.ceil(len(s) / 2* (nowRows - 1)),如果这里次数不理解,可以参照上表字符A到字符E是第一次循环,字符B到字符G代表第二次循环(如果有小伙伴表示这个循环的方式和表中的背景颜色不同,也可以理解成T-Y是第一次,V-Z是第二次)

        b、第一列加粗的不算是一次内部循环,这里可以理解成每一次内部循环开始前,需要去定位从哪个字符开始取,所以第一列就是用于定位的

        c、针对有背景色的数字做个解释,其中的数字代表的是他与他左侧的字符的距离。以第2行为例,字符是DEFGH,D是第2次内部循环开始前,从D开始取,而DE、EF、FG、GH之间的下标差分别是8282,所以在最后的表里面第2行的值 分别就是18282。

        d、继续观察,N字型转换的竖列之间下标差都是2 * (numRows - 1),参考下面两个图

 

       

        针对以上几个点,可以开始写代码了:

        代码如下:

class Solution:

    def convert(self, s: str, numRows: int) -> str:

        if numRows >= len(s) or numRows == 1:               #当numRows值大于等于字符串s长度时,直接返回字符串s

            out_put = s

        else:

            num1 = 0                        #num1用于记录外部循环次数

            num2 = math.ceil(len(s) / (2 * (numRows - 1)))    #num2用于判断内部循环次数,这里注意向上取整  

            num = 2 *(numRows - 1)          #num用于记录N字型竖列之间的下标差

            out_put = ''                    #用于输出

            while num1 < numRows:

                temp = s[num1]              #初始化每一次循环开始,从哪个下标开始取字符

                out_put += temp             #将初始化的字符加入out_put

                i = 1

                if num1 == 0 or num1 == (numRows - 1):   #当循环不是第一次或者最后一次时,每一次内部循环只取1个字符加入out_put

                    while i <= num2:                        

                        num4 = num1 + num * i

                        try:

                            out_put += s[num4]

                        except:

                            pass

                        i += 1

                    num1 += 1

                else:                                   

                    while i <= num2:

                        num4 = num1 + num * i

                        num3 = num4 - 2 * num1

                        try:

                            out_put += s[num3]

                            out_put += s[num4]

                        except:

                            pass

                        i += 1

                    num1 += 1

        return out_put

3、题解Python实现:

        这里只截个图,思路实际上是我最初的思路,但是我知道杂生成多个字符串,也写不到这么简洁,膜拜。

        

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

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

相关文章

Oracle-ASM磁盘组HIGH模式丢盘问题处理

背景: 用户一套Oracle19c的RAC集群ASM磁盘组使用了3个存储作为HIGH以及NORMAL冗余模式&#xff0c;每个存储分别对应一个failgroup&#xff0c;其中2个存储出现了故障导致ASM磁盘组对应的failgroup磁盘全部offline&#xff0c;在存储恢复正常之后&#xff0c;需要将offline的磁…

2020年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2020年英语二联考真题 一、完形填空 Directions: Read the following text. Choose the best word for each numbered blank and mark A, B, C or D on the ANSWER SHEET (10 points) Being a good parent is what every parent would like to be. But defining what it mea…

《Java黑皮书基础篇第10版》 第17章【习题】

Java语言程序设计 习题第十七章 17.2章节习题 17.1什么是文本文件&#xff0c;什么是二进制文件&#xff1f;可以使用文本编辑器来查看文本文件或者二进制文件吗&#xff1f; 文本文件是字符组成的文件&#xff0c;二进制文件是0和1组成的文件 文本编辑器只能访问文本文件 17…

一文教你彻底学会SPI协议

一文教你彻底学会IIC协议 一.概况SPI二.SPI连接2.1 一主一从2.2 一主多从 三.SPI通信过程3.1 CPOL&#xff08;极性&#xff09;和CPHA&#xff08;相位&#xff09;3.2 SPI时序图3.1 SPI起始信号3.2 SPI停止信号3.3 数据的有效性 四.代码实例 一.概况SPI SPI 协议是由摩托罗拉…

腾讯云服务器开Minecraft配置怎么选择?

腾讯云服务器Minecraft我的世界服务器配置怎么选择&#xff1f;10人以内玩2核4G就够用了&#xff0c;腾讯云开我的世界服务器选择轻量应用服务器就够了&#xff0c;轻量CPU采用至强白金处理器&#xff0c;大型整合包一般1.12版本的&#xff0c;轻量2核4G配置都差不多的&#xf…

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术&#xff0c;智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗&#xff0c;打电话人员抽烟等违规行为&#xff0c;灭火器未正确摆放&#xff0c;明火和烟雾等异常状态&a…

VMware 逃逸基础知识

虚拟化相关概念 VMM&#xff1a;即 VM Monitor &#xff0c;也被称为 Hypervisor&#xff08;虚拟机监控程序&#xff09;。VMM 是 guest os 的管理器&#xff0c;管理虚拟机运行。例如 Windows 的 Hyper-V &#xff0c;linux 的 KVM 以及裸机上安装的 Xen 和 VMware ESXi 都属…

《MySQL是怎么运行的》阅读笔记

mysql运行的整体架构简介 Mysql是由两部分构成&#xff0c;一部分是服务器程序&#xff0c;一部分是客户端程序。 服务器程序又包括两部分&#xff1a; 第一部分server层包括连接器、查询缓存、分析器、优化器、执行器等。涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有…

【Android复习笔记】Glide核心原理

Glide 核心流程 Glide中RequestManager会管理两个队列,一个请求队列,一个等待队列,当生命周期onStop停止时,把运行队列中的任务添加到等待队列中,当生命周期onResume恢复时,又从等待队列中添加到运行队列执行。 关于 Glide.with(this).load(url).into(iv); 主要搞清楚三…

Doris初认识

Doris初认识 文章目录 Doris初认识1. Doris 概述2. 核心特性3. 使用场景4. 架构 1. Doris 概述 Apache Doris 是由百度大数据部研发&#xff08;之前叫百度 Palo&#xff0c;2018 年贡献到 Apache 社区后&#xff0c;更名为 Doris &#xff09;&#xff0c;在百度内部&#xff…

Schneider Electric EcoStruxure Control Expert 15.3 Crack

Schneider Electric EcoStruxure Control Expert 15.3专为使用施耐德电气的Modicon PLC&#xff08;可编程逻辑控制器&#xff09;的控制和自动化工程师量身定制。它提供了一系列功能和工具&#xff0c;以方便自动化应用程序的开发、部署和维护。 施耐德电气EcoStruxure控制专家…

优化命令测试

命令内容&#xff1a; nload、free 目录 一、nload 1.删除yum仓库本地源 local.repo 2.nload命令的环境依赖文件只有在epel商城才有 所以需要安装epel 3.压力测试 二、free 1.free功能 2.free参数​编辑 4.实验&#xff1a;使用压力测试工具dd 查看内存使用的变化 总…

KUKA机器人出现“如果文件以写入方式打开,则不允许选择或执行程序”的解决办法

KUKA机器人出现“如果文件以写入方式打开,则不允许选择或执行程序”的解决办法 情景再现: 在操作KUKA机器人时可能会遇到这样的情况:如下图所示,即操作人员登录了管理员权限后,打开了config配置文件, 正常情况下,应该像下图所示点击左侧的来关闭config配置文件,但是…

Java012——引用数据类型String的简单学习

回顾Java数据类型 本次要学习的是Java引用数据类型String 一、对String类简单说明 说明&#xff1a;String是Java中的一个类 二、String类的作用 作用&#xff1a;主要用来创建和操作字符串。 三、使用String类 3.1、创建字符串 注意&#xff1a; 1、字符串使用双引号&qu…

【SQL应知应会】分析函数的点点滴滴(二)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

Linux中新建用户使用sudo问题

文章目录 sudo问题 sudo问题 sudo&#xff1a;权限提示指令&#xff0c;当使用sudo这条指令时&#xff0c;会将普通用户的权限提升为root权限 但是在命令行新建用户&#xff0c;这个用户使用sudo指令对一条指令提权是用不了的 这个用户没有在sudoers file这个文件中&#xff…

读发布!设计与部署稳定的分布式系统(第2版)笔记05_层叠

1. 水平扩展 1.1. 增加服务器来增加容量 1.1.1. 这些服务器集群被称为“农场” 1.2. 负载均衡的服务器集群 1.2.1. 不易遭遇单点系统失效 1.2.2. 高负载比低负载更易导致竞态条件的并发缺陷 1.3. 如果双节点集群出现失效&#xff0c;那么幸存服务器的工作负载将增加一倍 …

SpringBoot集成企业微信自建应用消息

目录 参考文档概述发送限制成员收不到应用推送消息的原因创建应用五、发送消息1、文本 text2、卡片文本3、图文news4、markdown 参考文档 官方文档 企业微信群机器人应用 概述 消息群发&#xff0c;是企业微信提供的用于企业向成员推送企业通知的工具&#xff0c;支持管理端…

AN13743-移植-无eSE

PN553/PN557 to PN7160 migration guidelines 1目的 本文件提供了从PN553/PN557 NFC控制器迁移到PN7160 NFC控制器的指南。它旨在从硬件和软件的角度描述PN7160 NFC控制器与PN553/PN557 NFC控制器的主要区别和新功能。软件部分逐步介绍如何适应Android开源项目 为PN553/PN55…

React学习笔记(二)组件详解

一、组件的概念&#xff1a; 当你开始学习 React 的时候&#xff0c;你会了解到 React 组件是 React 应用程序的基本构建块。组件是一个隔离的、可重复使用的代码块&#xff0c;由 HTML 元素、其他组件或自定义的 UI 元素组成&#xff0c;组件也就是react的核心思想&#xff0c…