將乙個給定字串根據給定的行數,以從上往下、從左到右進行 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 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,...