(python)Z字形變換--演算法
阿新 • • 發佈:2019-01-02
題目來源於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