Leetcode-Z 字形变换

本文介绍了一种用于将字符串按特定规律波动转换的算法实现。该算法适用于如Zigzag形式的字符串转换,通过双层循环及标记波动位置来实现字符串的波动拼接。特别地,文章提供了Python代码示例,并详细解释了如何处理边界情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述

找规律:
在这里插入图片描述
数学规律找到了,接下来的难点就是代码实现。
一共需要两层循环,外层循环为n行,内循环为字符串长度;python当中字符串是可以直接相加的(字符串相加就是拼接);注意观察奇数行号的规律是成波动性的,两个波动数相加刚好为n+2,所以需要用一个flag标记当前波动位置;当循环到第0行和最后一行时,规律显然是一样的,所以单独处理。

代码如下:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        a = ''
        if(len(s)==1 or numRows==1):   ## 边界情况处理
            return s
        elif(numRows>len(s)):
            numRows = len(s)
        for i in range(numRows):
            a = a+s[i]
            c = i
            flag=0     ## 每次重置标记
            for j in range(1,len(s)):
                if(i==0 or i==numRows-1):   ## 第一行和最后一行
                    if(c+2*(numRows-1)<len(s)):
                        c = c+2*(numRows-1)
                        a = a+s[c]
                else:
                    if(flag == 0 and c+2*(numRows-i-1)<len(s)):
                        c = c+2*(numRows-i-1)
                        a = a+s[c]
                        flag=1
                    elif(flag==1 and c+2*(numRows-(numRows-i))<len(s)):
                        c = c+2*(numRows-(numRows-i))
                        a = a+s[c]
                        flag=0
        return a

执行通过:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值