Z 字形变换

学习目标:

每日一题-Z 字形变换

学习内容:

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

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:

在这里插入图片描述
解题思路:
标签:字符串
整体的思路是遍历字符串,遍历过程中将每行都看成新的字符串构成字符串数组,最后再将该数组拼接起来即可
如果 numRows=1numRows=1 则说明当前字符串即为结果,直接返回
否则整个字符串需要经历,向下向右,向下向右,这样的反复循环过程,设定 downdown 变量表示是否向下,locloc 变量表示当前字符串数组的下标
如果 downdown 为 truetrue,则 loc+=1loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中
如果 downdown 为 falsefalse,则表示向右,则 loc-=1loc−=1,字符串数组下标向前移动,将当前字符加入当前字符串中
时间复杂度:O(n)O(n),nn为字符串s的长度
解法:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if  numRows == 1:
            return s
        length = min(len(s), numRows)
        rows = [""]*length
        loc = 0
        down = False
        for c in s :
            rows[loc] += c
            if  loc == 0 or loc == numRows - 1:
                down = not down
            if down:
                loc+=1
            else:
                loc+=-1
        ans = ""
        for row in rows:
            ans+=row
        return ans

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值