(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
    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/hanxianzhao/article/details/84201628
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞