將一個給定字符串根據給定的行數,以從上往下、從左到右進行 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)