leetcodeZ字形变换第1363题python

描述
给定一个字符串 s 和一个整数 numRows. 你需要把 s 排布成一个 numRows 行的 “之” 字形. 然后返回逐行阅读的结果.

注意, “之” 字形是按照 下->右上->下->右上…的方向延伸的.

| /| /|
| / | / | …
| / | / | …
|/ |/ |/
样例
样例 1:

输入: “PAYPALISHIRING”, numRows = 3
输出: “PAHNAPLSIIGYIR”
解释:
转换之后我们会得到
P A H N
A P L S I I G
Y I R
一行一行地读, 得到答案: “PAHNAPLSIIGYIR”.
样例 2:

输入: “PAYPALISHIRING”, numRows = 4
输出: “PINALSIGYAHRPI”
解释:
转换之后我们会得到
P I N
A L S I G
Y A H R
P I
一行一行地读, 得到答案: “PINALSIGYAHRPI”.
样例 3:

输入: “PAYPALISHIRING”, numRows = 1
输出: “PAYPALISHIRING”
解释:
转换之后我们会得到
PAYPALISHIRING
一行一行地读, 得到答案: “PAYPALISHIRING”.

class Solution:
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows == 1:
            return s
 
        rows = ['']* min(numRows, len(s))#生成的是用于存储字符的几个行。
        godown = False#向下,默认禁止
        currow = 0#当前行
        for c in s:
            rows[currow] += c#当前行读取一个字符
            if currow == 0 or currow == numRows-1:
                godown = not godown#向下是否反转
            if godown:
                currow += 1#当前行+1,变成下一行,让下一行去读取字符
            else:
                currow -= 1#当前行-1,让上一行去读取字符
        return ''.join(rows)

  

#解释
rows = [’’]* min(numRows, len(s))
假设numRows=4,len(s)=10
rows=[’’, ‘’, ‘’, ‘’]。生成的是用于存储字符的几个行。
大概意思:
(1)生成几个的’’,个数=rows ,假设rows=4
(2)遍历字符串
(3)将字符串第一个字符传入第一个’’.将第二个字符传入第二个’’.
将第三个字符传入第三个’’,将第四个字符传入第四个’’。
(4)currow到达底部后, '‘逆序读取字符,即第三个’‘开始读取,然后第二个’‘读取,最后第一个’'读取
(5)currow到达顶部后, '‘再次顺序读取字符,第二个’‘读取,,再第三个’‘读取,最后到达底部,第四个’'读取。
不断重复4,5,直到读取完所有字符

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值