iT邦幫忙

0

leetcode with python:6. Zigzag Conversion

  • 分享至 

  • xImage
  •  

題目:

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%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言