Z 字形變換

2021-10-25 09:09:15 字數 2035 閱讀 8332

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

自己解答

class

solution

:def

convert

(self, s:

str, numrows:

int)

->

str:

if numrows==1:

return s

ov =

in1=

0 in2=

0 h=0[

""for i in

range

(numrows)])

for su in s:

ov[in1]

[in2]

=su if in2 1and h==0:

in2=in2+

1else

: h=

1if in2>0:

in2=in2-

1 in1=in1+1[

""for i in

range

(numrows)])

else

: in2=

1 h=

0 res=

''for i in

range

(numrows)

:for j in

range

(len

(ov)):

res=res+ov[j]

[i]return res

執行用時:484 ms, 在所有 python3 提交中擊敗了7.84% 的使用者

記憶體消耗:15.4 mb, 在所有 python3 提交中擊敗了5.19% 的使用者

大神解答

class

solution

:def

convert

(self, s:

str, numrows:

int)

->

str:

if numrows <2:

return s

res =[""

for _ in

range

(numrows)

]print

(res)

i, flag =0,

-1for c in s:

print

('c :'

, c)

res[i]

+= c

print

('res : '

, res[i]

)print

(res)

if i ==

0or i == numrows -1:

# 當i=0時 i 開始遞增 flang 為 +1 ,當i == numrows - 1 時 i 遞減 flag=-1

flag =

-flag

i += flag

return

"".join(res)

執行用時:56 ms, 在所有 python3 提交中擊敗了95.87% 的使用者

記憶體消耗:13.7 mb, 在所有 python3 提交中擊敗了9.73% 的使用者

ps :

此**為leetcode排名靠前的他人所寫

Z字形變換

題目 將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r 之後從左往右,逐行讀取字元 pahnaplsiigyir 思路 通過從左向右迭代字串,我們可以輕鬆地確定字元位於 z 字形圖案中的哪一行。演算法 我們可以使用 min num...

Z 字形變換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。輸入 s leetcodeishiring numrows 4 輸出 ldreoeiiecihntsg l d r e o e i i e c i h n t s g 注釋思路 class solution 有了列數和行數,總個數...

Z 字形變換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedh...