LeetCode 6.Z字符變換
題目描述
題目分析
對於這個題目,我們不必先急着寫代碼,先仔細分析一下這個Z字符
Z字符可以分解成一個又一個的“Z”,但是這並不利於我們求解,仔細分析我們可以將Z字符再拆分,定義單位結構如下所示
可以看到這個結構中,第一行和最後一行出現的字符數量爲1,其餘爲2
且該單位結構元素的數量爲 2*行數-2
程序設計思路
- 設行數爲NumRows
- 初始化NumRows個空列表用來儲存Z字符的每一行
- 截取上面所示的單位結構:由於單位結構包含元素數量爲 2*NumRows-2,所以我們對其取餘,便可得到。
- 將單位結構的元素填到每一行,如上圖所示,i <= NumRows 時 ,直接填入第i個空列表;NumRows<i<=2NumRows-2時,其所屬的列表應是第2NumRows-i個
- 將列表依次合併
代碼實現
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提交結果
歡迎關注公衆號 : 數學算法實驗室