1. 程式人生 > >(python)Z字形變換--演算法

(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