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個元素...