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,直到读取完所有字符

你可能感兴趣的:(leetcode学习笔记)