力扣LeetCode刷題日記(四) Z 字形變換

2021-09-26 05:35:03 字數 1727 閱讀 5587

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

class

solution

:def

convert

(self, s:

str, numrows:

int)

->

str:

n =min(numrows,

len(s)

)# 字母排列的行數

list_str =[[

]for _ in

range

(n)]

# 建立n個空列表

if n ==1:

# 如果只有一行,返回原字串

return s

direction =

0# 字母排列的方向。0:下 1:右上

i, j =0,

0# 行號和列號

# 將每個字元z字排列

for m in s:

list_str[i]

if direction ==0:

# 向下排列

if i < n-1:

# 不是最後一排

i +=

1else

:# 最後一排,接下來要向右上排列

i -=

1 direction =

1elif direction ==1:

# 向右上排列

if i >0:

# 不是第一排

i -=

1 list_str[i]"")

else

:# 第一排,接下來向下排序

i +=

1 direction =

0# 將列表轉換成新的字串

str_new =

""for i in

range

(n):

str_new +=

"".join(list_str[i]

)return str_new

在解答這道題的時候,邏輯上的調整就不寫出來了,對於python的使用出現語法問題:

一開始想給把字串的字母填到列表的時候,使用了list_str[i][j]的寫法,完全當成二維陣列在處理,結果報錯列表索引超出範圍。

在把列表轉換成字串的時候,一開始寫成str_new = 「」.join(list_str),報錯期待字串,結果出現列表。

力扣LeetCode刷題日記(一)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

力扣LeetCode刷題日記(二)

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...

力扣刷題日記(3)

最近有點懶,哈哈,刷題挺慢的,今天用python3 練練手了,題目如下 設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,...