LeetCode演算法題6 Z 字形變換解析

2021-09-01 11:19:20 字數 1410 閱讀 4426

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

這個題就是乙個找規律的題,每一行的字母索引都是按步可找的。所以找一下規律先,其實看示例2,第一行就是每個元素之間都差2*numrows-2,最後一行也是這樣,中間的兩行一部分元素是這樣,還有一部分元素與行數有關。所以程式就可以直接編寫了:

c++源**:

class

solution

}return str;}}

;

python3源**:

class

solution

:def

convert

(self, s, numrows)

:"""

:type s: str

:type numrows: int

:rtype: str

"""if numrows==1:

return s

ns =

"" n =

len(s)

step =

2* numrows -

2for i in

range

(numrows)

:for j in

range

(i, n, step)

: ns += s[j]

if i!=

0and i!=numrows-

1and j+step-

2*ins += s[j+step-

2*i]

return ns

6 Z 字形變換 leetcode

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

6 Z字形轉換

將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedhn 請你實現這個將字串進行指定行數變換的函式 string c...

6 Z字形變換 Leetcode刷題 C

我自己的做法是將對於z字形排列的每一行,遍歷字串,然後根據下標與numrows的關係加到result字串中,這樣空間複雜度為o 1 但是這樣時間複雜度是o m n class solution return result 結果 執行用時 100 ms,在所有 c 提交中擊敗了7 的使用者 記憶體消耗...