leetcode 06 Z 字形變換

2021-09-27 01:31:02 字數 963 閱讀 5775

leetcode題目鏈結

題目要求:將字串按照n的形狀排列。思路一

參考部落格

找出排列後的每一行中各個元素下表的關係

假設當前行數是r,總行數r,i(n)表示某行第n個字母在原字串中的index,n從0開始:

思路二

參考部落格

還是用二維陣列,只需要關心當前元素是向上儲存還是向下儲存

注意方向掉頭的時刻點。

class solution:

def convert(self, s: str, numrows: int) -> str:

#如果s為空、s的長度小於numrows、numrows為1,直接返回

if s==none or len(s)<=numrows or numrows==1:

return s

#建立二維陣列temp,初始每一維都是乙個空字串

temp=['']*numrows

flag=false #用來標記當期記錄往下儲存還是向上儲存

row=0

for i in s:

print(i,row) #用於測試

temp[row]+=i  #當前行增加i

if row==0 or row==numrows-1: #改變方向

flag= not flag

if flag:

row+=1 #向下

else:

row-=1 #向上

res=''.join(temp) #join函式,字串鏈結

return res

if __name__ == "__main__":

a = solution()

print(a.convert('leetcodeishiring', 3))

LeetCode 06 Z自行變換

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

06 Z 字形變換

這道題目在解題時關鍵是要弄清楚 z字形排列 是怎麼一回事,僅僅根據numrow為3的情況可能看的不會 太明顯,把行數為4和行數為3的情況,做乙個對比,更容易找到解題思路。1 當不考慮對角線上的元素時,完成可以看成是數字是一列一列的跳轉,且跳轉距離為numrow 2 2 2 再去考慮計算對角線的元素的...

06 Z字形變換

題目好像開始越來越難了,這道題一開始毫無頭緒,只知道了每一行用乙個slice,然後依次把字元放進slice中,然後突然發現好像可以找規律,如果分成n行,那麼每乙個迴圈都是2n 2個元素,這道題最重要的就是要知道字元應該放在哪個slice裡面。假如要分成4行,那麼一次包括 tmp 2 4 2 6個元素...