【力扣第六題】-- Z字形變換(python版本)
阿新 • • 發佈:2020-12-29
題目描述
將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。
比如輸入字串為 “LEETCODEISHIRING” 行數為 3 時,排列如下:
之後,你的輸出需要從左往右逐行讀取,產生出一個新的字串,
比如:“LCIRETOESIIGEDHN”。
思路解析
字串 s 是以 Z 字形為順序儲存的字串,按順序遍歷字串 s 時,每個字元 c 在 Z 字形中對應的行索引先增大再減小;
解決思路: 模擬這個行索引的變化,在遍歷 s 中每個字元時,把每個字元填到正確的行 res[i] 中,最後再按行拼接字元。
具體程式碼
def convert(s, numRows):
# 若行數為1時,可直接輸出
if numRows < 2:
return s
# 初始化為numRows個空字串,用於存放從左往右逐行讀取的字元
res = ['' for _ in range(numRows)]
# i為字元的下標,從0開始
i = 0
# flag用於轉向方向,當遇到Z字的轉折處時,翻轉方向
flag = -1
for c in s:
res[i] += c
# 當遇到Z字的轉折處時,翻轉方向
if i == 0 or i == numRows - 1:
flag = - flag
i += flag
return ''.join(res)
def main():
s = str(input())
num = int(input())
res = convert(s, num)
print(res)
main()