LeetCode第6题:6.Z字形变换

题目表述

在这里插入图片描述

思路分析

①首先,检查numRows是否小于,如果小于2,直接返回字符串s,即转换后的字符和原字符相同。

②初始化结果列表res,长度为numRows,列表中的每个元素都是一个空字符串,用来存储转换后的每一行的字符串。
这里用到了Python的列表推导式来简化代码,我也是第一次见到这种写法,学到了学到了。

res["" for _ in range(numRows):]
#对于range(numRows)生成的每一个元素,都生成一个新的空字符串""

③遍历原字符串s:
1):首先设置变量 i ,用来表示当前字符被添加到列表的哪一行。初试就是第一行,故 i = 0
2):按顺序遍历字符串 s 时,每个字符 c 在 N 字形中对应的行索引 先从 s1增大到sn,再行sn减小到s1,如此反复。因此再设置一个标签flag,用于判断遍历是否到达了Z字形的转折点,如果到了转折点时,接下来遍历到的字符将被反向添加到列表里。

④最后将列表res的结果连接起来即可。
【拓:在Python中,join() 方法是字符串(str)类的一个方法,用于将序列中的元素以指定的字符连接生成一个新的字符串。这个方法只适用于字符串类型的序列,比如列表(list)、元组(tuple)等,但其中的元素都必须是字符串类型。】

python

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows < 2:
            return s
        res = ["" for _ in range(numRows)]

        i, flag =0,-1
        for c in s:
            res[i] += c
            if i == 0 or i == numRows -1 :
                flag = -flag
            i += flag
        return "".join(res)

后记

最近有种做题就是不断认证自己是个呆瓜的感觉
要么想不明白思路,要么写不准代码
这道题算很简单的,主要是理清过程
但是不看社区代码还是写不准,哭死

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值