題目:
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: "PAHNAPLSIIGYIR"
給定一個字串,將其變為zigzag模式,按第一行往下,每行由左至右的順序得出一新字串回傳
題目還會給定一數numRows,表示要轉成有numRows行的zigzag模式
zigzag模式就是上面題目之字型的模樣
看似沒有什麼規律
但我們把字串每個字元應該在第幾行列出後,就能看到一些蛛絲馬跡
以"PAYPALISHIRING"為例
字串字元:PAYPALISHIRING
應在行數:12321232123212
可以看出行數是1到numRows,numRows到1不斷重複的變化
抓到規律我們就能開始實作了
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows==1: #假如numRows為1,直接回傳原字串即可
return s
record=[""]*numRows
direct="+"
n=1
for i in s:
if direct=="+":
record[n-1]=record[n-1]+i
n=n+1
if n==numRows:
direct="-"
else:
record[n-1]=record[n-1]+i
n=n-1
if n==1:
direct="+"
ans=""
for i in record:
ans=ans+i
return ans
我們先宣告一個有numRows個空字串的陣列
準備用來存每一行的字元
我們會以1到numRows,numRows到1的循環順序一一將字串裡的字元放入各行
為了知道何時往上何時往下,我設立了一個指標direct儲存現在要走的方向
當一碰到第1或numRows行,就改變direct,改變方向
而我們紀錄完畢後,只要將各行字串相加回傳即可
最後執行時間54ms(faster than 96.53%)
那我們下題見