page contents

python基础编程100例:第100期-基础结构:字符串 Z 字形变换

本文讲述了python基础编程100例:第100期-基础结构:字符串 Z 字形变换!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-04-85T1tvNK624e380915498.png

本文讲述了python基础编程100例:第100期-基础结构:字符串 Z 字形变换!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第100期-基础结构:字符串 Z 字形变换

1 问题描述

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:


P   A   H   N

A P L S I I G

Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。


示例 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"


初始代码


from typing import List

class Solution:

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

        #在此之间填写代码


print(Solution().convert("PAYPALISHIRING",3))

print(Solution().convert("PAYPALISHIRING",4))

print(Solution().convert("A",1))


2 解题思路

标签:字符串

我们先假定有 numRows=4 行来推导下,其中 2numRows-2 = 6 , 我们可以假定为 step=2numRows-2 ,我们先来推导下规则:

第0行: 0 - 6 - 12 - 18

==> 下标间距 6 - 6 - 6 ==> 下标间距 step - step - step

第1行: 1 - 5 - 7 - 11 - 13

==> 下标间距 4 - 2 - 4 - 2 ==> 下标间距step-21(行)-21(行)-step-21(行)-21(行)

第2行: 2 - 4 - 8 - 10 - 14

==> 下标间距 2 - 4 - 2 - 4 ==> 下标间距step-22(行)-22(行)-step-22(行)-22(行)

第3行:3 - 9 - 15 - 21

==> 下标间距间距 6 - 6 - 6 ==>下标间距step - step - step


3 解题方法

from typing import List

class Solution:

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

        if numRows==1 :return s

        else:n,b,c,y=0,0,0,[]

        while b<numRows:

                try:

                    y.append(s[n])

                except:

                    b+=1

                if b==0 or b==numRows-1:n+=(numRows-1)*2

                else:

                    if c%2==0:n+=((numRows-1)*2-2*b)

                    else:n+=(2*b)

                c+=1

                if n>=len(s):

                    b+=1

                    n,c=b,0

        return ''.join(y)


print(Solution().convert("PAYPALISHIRING",3))

print(Solution().convert("PAYPALISHIRING",4))

print(Solution().convert("A",1))

第1-3,19-21行: 题目中已经给出的信息,运行代码时要根据这些代码进行编辑

第4行: 特殊情况,当numRows等于1时,直接返回原字符串

第5行: 定义变量n,b,c为0以及空列表y,n用于索引字符串,b用于判断行数,c用于判断每次的特殊情况

第6行: 定义变量p用于存放字符串s长度

第7行: 当b小于numRows的大小时,执行循环

第8行: 当n在字符串长度内时,将n对应的字符加入列表y中

第9行: 对于第0行和最后一行,下标距离为(numRows-1)*2

第10-13行: 对于中间的行数,下标距离按照周期二循环出现,所以用c来判断第几次出现

第14-16行: 当n的大小大于字符串,b执行下一行,n和c重新赋值

第17行: 将列表变为字符串并返回


代码运行结果为:

attachments-2022-04-H8oqY0Hq624e37c7d1b3c.png

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-x9cagF60629080eb012e1.jpeg


  • 发表于 2022-04-07 09:02
  • 阅读 ( 622 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1478 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章