(python)Z字形变换--算法

题目来源于leetcode,自行搜索

首先要找到每一行各字符之间的关系
比如第二行对应的下标分别为 1 5 7 11 13
第三行对应的下标分别为 2 4 8 10 14
可以归纳总结出对应的两个公式:较远的为(numRows-1)*2 - 2(i-1) = 2numRows - 2i
较近的为:2 * ( i - 1 ) = 2i - 2
当为第一行的时候较近的公式为0 判断后进行跳过
当为最大一行时较远的公式为0 判断后进行跳过
使用while循环进行不断地叠加,当最后叠加出来的字符串长度大于len(s)时结束

def func(s,numRows):
    if numRows <= 1 or len(s) <= numRows:
        return s
    result = ""
    lens = len(s) - 1
    for i in range(1,numRows+1):
        far = 2 * numRows - 2 * i
        low = 2 * i - 2
        #因为行数从1开始所以减一
        cur = i - 1
        result += s[cur]
        while cur <= lens:
        	#判断为0 进行跳过
            if far != 0:
                cur += far
                if cur <= lens:
                    result += s[cur]
            #判断为0 进行跳过
            if low != 0:
                cur += low
                if cur <= lens:
                    result += s[cur]
    return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值