Z 字形变换(Python3) - Go语言中文社区

Z 字形变换(Python3)


题目:

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

L   C   I   R
E T O E S I I G
E   D   H   N

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

示例:

示例 1:
输入: s = “LEETCODEISHIRING”, numRows = 3
输出: “LCIRETOESIIGEDHN”

示例 2:
输入: s = “LEETCODEISHIRING”, numRows = 4
输出: “LDREOEIIECIHNTSG”
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

思路:

比较暴力的解法是,遍历输入的每个字符,将其位置记录在矩阵中,然后依次拼接矩阵中每行内容,但是遗憾的是矩阵使用的不熟练,在记录的时候总是不成功,耽误了挺长时间,所以这个方法暂且记下来,等以后再来实现。不过就算实现了,时间复杂度也超过了O(n),有点得不偿失。

另一种思路,也是我常用的一种算法解法,就是「数学归纳法」。对,没错,就是把输入和输出都列出来,然后找规律,以下是我思考的过程:
思路
可以看到,行数和列数相加的和就是遍历的元素的索引,满足的规律如代码所示:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if (numRows == 1):
            return s
        result = ""
        s_len = s.__len__()
        num = numRows * 2 - 2
        for row in range(numRows):
            col = 0
            while row + col < s_len:
                result += s[row + col]
                if (row != 0 and row != numRows - 1 and col + num - row < s_len):
                    result += s[col + num - row]
                col += num
        return result

结果:
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_35221523/article/details/89442888
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢