【力扣算法09】之 6. N 字形变换 python

news/2024/11/24 6:33:33/

文章目录

  • 问题描述
    • 示例1
    • 示例2
    • 示例3
    • 提示
  • 思路分析
  • 代码分析
  • 完整代码
  • 详细分析
  • 运行效果截图
    • 调用示例
    • 运行结果
  • 完结

问题描述

在这里插入图片描述

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

P A H N
A P L S I I G
Y I R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数

string convert(string s, int numRows);

在这里插入图片描述

示例1

输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”

示例2

输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I

示例3

输入:s = “A”, numRows = 1
输出:“A”

提示

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、‘,’ 和 ‘.’ 组成
  • 1 <= numRows <= 1000

思路分析

在这里插入图片描述

给定一个字符串 s 和一个整数 numRows,要求按照 Z 字形排列将字符串重新排序,并返回重新排序后的字符串。
首先,根据 numRows 的值判断边界情况。如果 numRows 为 1,则直接返回原字符串 s。
然后,创建 numRows 个字符串,用于保存每一行的字符。
接下来,遍历字符串 s 中的每个字符,并根据规律将字符放入对应的行中。

规律1:前 numRows 个字符依次放入每一行中。
规律2:之后的 numRows-2 行,字符依次逆序放入每一行中,即从倒数第二行开始往上逐行放置字符。
规律3:重复规律1和规律2,直到遍历完字符串 s 中的所有字符。
最后,将每一行的字符拼接起来,得到最终结果。

代码分析

在这里插入图片描述

  1. 首先,在代码中定义了一个 Solution 类,用于实现字符串变换的方法。
  2. 在 convert 方法中,接受两个参数 s 和 numRows,并返回变换后的字符串。
  3. 方法开始处判断 numRows 是否为 1,如果是则直接返回原字符串 s。
  4. 创建一个列表 rows,长度为 numRows,用于保存每一行的字符。这里使用了列表推导式来创建初始化的空字符串列表。
  5. 定义两个变量 curRow 和 goingDown,分别用于追踪当前字符应该放在哪一行和字符行进的方向。
  6. 遍历字符串 s 中的每一个字符。
    • 将当前字符添加到对应的行 rows[curRow] 中。
    • 如果当前行 curRow 为首行或末行,则改变字符行进的方向,即 goingDown 取反。
    • 根据字符行进的方向更新当前行 curRow 的值。
  7. 遍历完成后,利用 .join() 方法将每一行的字符拼接起来,并返回最终结果。

完整代码

class Solution(object):def convert(self, s, numRows):if numRows == 1:return srows = [''] * min(numRows, len(s))  # 创建 numRows 个空字符串,用于保存每一行的字符curRow = 0   # 当前字符所在的行goingDown = False   # 字符行进的方向,初始为 False 表示向上for c in s:rows[curRow] += c   # 将当前字符添加到对应的行中# 根据规律1和规律2更新 curRow 和 goingDown 的值if curRow == 0 or curRow == numRows - 1:goingDown = not goingDowncurRow += 1 if goingDown else -1return ''.join(rows)   # 将每一行的字符拼接起来,返回最终结果

详细分析

class Solution(object):

定义一个名为 Solution 的类,用于实现字符串变换的方法。

    def convert(self, s, numRows):if numRows == 1:return s

定义 convert 方法,接收两个参数:字符串 s 和整数 numRows。如果 numRows 的值为 1,即只有一行,直接返回原始字符串 s。

        rows = [''] * min(numRows, len(s))curRow = 0goingDown = False

创建长度为 numRows 的空字符串列表 rows,使用列表推导式生成。curRow 用于追踪当前字符应该放在哪一行,初始值为 0。goingDown 用于表示字符行进的方向,初始值为 False,表示向上。

        for c in s:rows[curRow] += c

遍历字符串 s 中的每一个字符,将当前字符 c 添加到对应行 rows[curRow] 中的末尾。

            if curRow == 0 or curRow == numRows - 1:goingDown = not goingDown

如果当前行 curRow 为首行或末行,则改变字符行进的方向,即 goingDown 取反。

            curRow += 1 if goingDown else -1

根据字符行进的方向来更新当前行 curRow。如果 goingDown 为 True,则 curRow 自增 1,否则自减 1。

        return ''.join(rows)

遍历完成后,使用 .join() 方法将列表 rows 中的每一行字符拼接起来,返回最终的结果字符串。

运行效果截图

调用示例

solution = Solution()
s = "PAYPALISHIRING"
numRows = 3s1 = "PAYPALISHIRING"
numRows1 = 4s2 = "A"
numRows2 = 1
print(solution.convert(s, numRows))
print(solution.convert(s1, numRows1))
print(solution.convert(s2, numRows2))

运行结果

在这里插入图片描述

完结

在这里插入图片描述


http://www.ppmy.cn/news/857174.html

相关文章

linux搭建乐网服务器,教你linux搭建web服务器

在我本机配置时间不长&#xff0c;不过花了好长的时间写了份配置文档&#xff0c;和大家分享一下&#xff0c;希望对大家有用 LINUX发行版本&#xff1a;Fedora 14 , Apache .2.2 安装就不说了!依然采用rpm包安装方式 &#xff0c;下面进入正题&#xff1a; httpd.conf配置文件…

我乐网关停1月套牢2亿风投

基本死了,除非他们有无限的资本.” 国内前三大视频网站之一的我乐网(www.56.com)自6月4日起关停,到今天已经已整整1个月了.公司的解释是 “正在对所有视频数据进行维护,并对系统进行大规模升级”. 但多位视频网站业内人士告诉记者,长达1个月的“关停”是因为其对视频内容监管…

[爆料]有消息人士表示我乐网确实收到了有关部门的处罚通知

中新浙江网6月20日电 “我乐网正在对所有视频数据进行维护&#xff0c;并对系统进行大规模升级。由于数据量庞大&#xff0c;需要一定时间&#xff0c;请广大用户原谅。 这是视频分享网站我乐网的首页公告。从6月4日关站&#xff0c;到6月9日发布“迟到”的公告&#xff0c;…

选购螺杆支撑座要考虑哪些因素?

为了可以保证螺杆支撑座的使用效果&#xff0c;同时也能够发挥出更好的使用功能&#xff0c;避免出现各种质量隐患&#xff0c;建议大家在购买的时候一定要在专业正规的厂家进行选购&#xff0c;那么&#xff0c;我们在选购的时候要考虑哪些方面的因素呢&#xff1f; 1、考虑到…

Python爬虫学习笔记(一)————网页基础

目录 1.网页的组成 2.HTML &#xff08;1&#xff09;标签 &#xff08;2&#xff09;比较重要且常用的标签&#xff1a; ①列表标签 ②超链接标签 &#xff08;a标签&#xff09; ③img标签&#xff1a;用于渲染&#xff0c;图片资源的标签 ④div标签和span标签 &…

彗星来的那一夜 Coherence Bt种子下载地址

彗星来的那一夜 Coherence Bt种子下载地址&#xff08;点击查看:如何下载本站BT种子&#xff1f;&#xff09;&#xff08;网盘广告太多的解决办法&#xff09;&#xff1a; http://www.colafile.com/file/6975509&#xff08;彗星来的那一夜BD中英双字1024高清 www.xro.pw 首发…

彗星HTTP操作支持库 - 易语言支持库

支持库信息支持库名称:彗星HTTP操作支持库支持库版本:1.60 (更新时间20161123)支持库下载:http://www.it608.com/down/CometHTTP.zipQQ群交流:群号42691133 支持库命令: HTTP操作编码转换其他彗星HTTP读文件彗星URL编码彗星GZIP压缩 彗星HTTP读文本彗星URL解码彗星GZIP解压…

彗星小助手

软件介绍 窗口SPY&#xff0c;探测、操作外部窗口 基于 Win32 的实用工具&#xff0c;它提供系统的进程、线程、窗口和窗口消息的图形视图。使用窗口SPY可以执行下列操作&#xff1a; 显示系统对象&#xff08;包括进程、线程和窗口&#xff09;之间关系的图形树。 搜索指定的…