LeetCode 6.Z字符變換

LeetCode 6.Z字符變換

題目描述

題目分析
對於這個題目,我們不必先急着寫代碼,先仔細分析一下這個Z字符
Z字符可以分解成一個又一個的“Z”,但是這並不利於我們求解,仔細分析我們可以將Z字符再拆分,定義單位結構如下所示

可以看到這個結構中,第一行和最後一行出現的字符數量爲1,其餘爲2
且該單位結構元素的數量爲 2*行數-2

程序設計思路

  1. 設行數爲NumRows
  2. 初始化NumRows個空列表用來儲存Z字符的每一行
  3. 截取上面所示的單位結構:由於單位結構包含元素數量爲 2*NumRows-2,所以我們對其取餘,便可得到。
  4. 將單位結構的元素填到每一行,如上圖所示,i <= NumRows 時 ,直接填入第i個空列表;NumRows<i<=2NumRows-2時,其所屬的列表應是第2NumRows-i個
  5. 將列表依次合併

代碼實現

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if len(s) == 1 or len(s)==2 : return s
        if numRows == 1 : return s
        b = ["" for i in range(numRows)]
        for i in range(len(s)):
            a = s[i]
            j = i % (numRows*2 - 2)
            if j < numRows : b[j] += a
            else : b[numRows*2-j - 2] += a
        a = ""
        for item in b:
            a += item
        return a

LeetCode提交結果

歡迎關注公衆號 : 數學算法實驗室

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章