題目:
將乙個給定字串根據給定的行數,以從上往下、從左到右進行 z 字形排列。
比如輸入字串為"leetcodeishiring"
行數為 3 時,排列如下:
l c i r之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如:e t o e s i i g
e d h n
"lciretoesiigedhn"
。
請你實現這個將字串進行指定行數變換的函式:
string convert(string s, int numrows);示例 1:
輸入:s = "leetcodeishiring", numrows = 3輸出:"lciretoesiigedhn"示例 2:
輸入:s = "leetcodeishiring", numrows = 4輸出:"ldreoeiiecihntsg"解釋:l d r思路:e o e i i
e c i h n
t s g
觀察結構,其可分為cov=num*2-2個數字一組
1.每層構建乙個字串,對字串進行遍歷,將結果放入對應得層,合併字串
2.取固定行數,每行按序號從str中取
思路1
def convert(self, s: str, numrows: int) -> str:
if numrows == 1:
return s
cov = numrows*2-2
l = ['']*numrows
for i in range(len(s)):
n = i%cov
if n >= numrows:
l[cov-n] +=s[i]
else:
l[n] += s[i]
return ''.join(l)
思路2
def convert(self, s: str, numrows: int) -> str:
if numrows == 1:
return s
cov = numrows*2-2
l = ''
for i in range(numrows):
j = 0
while j+i < len(s):
l+=s[i+j]
if i!=0 and j+cov-i < len(s) and i!=numrows-1:
#除第一行和最後一行,其它第i行得j+i個與cov-i+j個同處一行
l+=s[j+cov-i]
j+=cov
return l
思路1優化z形遍歷
def convert(self, s, numrows):
if numrows == 1 or numrows >= len(s):
return s
l = [''] * numrows
index, step = 0, 1
for x in s:
l[index] +=x
if index == 0:
step = 1
elif index == numrows -1:
step = -1
index += step
return ''.join(l)
6 Z字形變換
一 題目 將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 示例...
6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r 之後從左往右,逐行讀取字元 pahnaplsiigyir 示例1 輸入 s paypalishiring numrows 3 輸出 pahnaplsiigyir 示例 2 輸入 s...
6 Z 字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedh...