LeetCode--006--Z 字形變換(python)

將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。數組

好比輸入字符串爲 "LEETCODEISHIRING" 行數爲 3 時,排列以下:app

 

 

 

以後,你的輸出須要從左往右逐行讀取,產生出一個新的字符串,好比:"LCIRETOESIIGEDHN"。函數

請你實現這個將字符串進行指定行數變換的函數:spa

string convert(string s, int numRows);
示例 1:code

輸入: s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"
示例 2:blog

輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"
解釋:字符串

L D R
E O E I I
E C I H N
T S Gstring

思路:io

這個題只須要用數組嵌套就能夠作,分桶的思路,用在s裏面原來的index對某個數取模運算,分到不一樣的桶裏面,剩下的就是找規律了。class

很明顯能夠當作每次畫了一個v字,可是不是從頭至尾的v,好比leet,從L到T,下一個V是從C到E,畫V的時候,只須要把index映射到桶的編號就能夠了。

index = i%(2*numRows - 2)  下面判斷index是否爲要分到的桶的編號,當index小於numRows index就是桶的編號,不然計算index = 2*numRows - 2 -index

class Solution:
    def convert(self, s, numRows):
        if numRows==1:
            return s
        res = [[]for i in range(numRows)]
        for i in range(len(s)):
            index = i %(2 * numRows - 2)
            index = index if index <numRows else 2*numRows-2-index
            res[index].append(s[i])
        re = ""
        for i in range(numRows):
            re += ''.join(res[i])
        return ''.join(re)
相關文章
相關標籤/搜索