萌新练习写代码的每日一练:Z 字形变换

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

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

思路:一开始想的是当行数=4时,输出和输入之间的间隔字母数字为5,3,1(比如解释中的L和D间隔了5个字母,第二行E和O间隔为3,)只需要按照规律放到一个空的数组里就能完成(事实证明是我想太简单了)。

转换思路:将每个字母标号,从0到numRows*2-2,例如解释中L,E,E,T,C,O标号为0-5,D标号为0,以此类推。之后取新标注好的元素下标,按这个顺序依次插入到空数组里即可。

代码:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s
        result = ['']*numRows
        r = numRows*2 - 2
        for i in range(len(s)):
            if i%r <= r - i%r:
                t = i%r
            else:
                t = r - i%r
            result[t] += s[i]
        return (''.join(result)) # join():连接字符串数组,前面的''用这种方法可以去掉

解题时遇到的问题:一开始没有考虑在第一轮时,余数会大于行数,因此出现了错误,于是加上了一个if的判断完成。最后输出的时候没有用上join()函数,最后的结果就会变成分开的字符串。就像这样

题目来自LeetCode第6题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值