將字串"paypalishiring"
以z字形排列成給定的行數:
p a h n之後從左往右,逐行讀取字元:a p l s i i g
y i r
"pahnaplsiigyir"
實現乙個將字串進行指定行數變換的函式:
string convert(string s, int numrows);示例 1:
輸入:s = "paypalishiring", numrows = 3輸出:"pahnaplsiigyir"示例 2:
輸入:s = "paypalishiring", numrows = 4輸出:"pinalsigyahrpi"解釋:p i na l s i g
y a h r
p i
"""方法一"""
class solution:
def convert(self, s, numrows):
""":type s: str
:type numrows: int
:rtype: str
"""if 1 == numrows:
return s
len_s = len(s)
piece_len = 2 * (numrows - 1)
result = ""
index = 0
while index < len_s:
result += s[index]
index += piece_len
for m in range(1, numrows - 1):
index = m
while index < len_s:
result += s[index]
right_index = index + (numrows - m - 1) * 2
if right_index < len_s:
result += s[right_index]
index += piece_len
index = numrows - 1
while index < len_s:
result += s[index]
index += piece_len
return result
"""方法二"""
class solution(object):
def convert(self, s, numrows):
""":type s: str
:type numrows: int
:rtype: str
"""# 若行數為1,直接輸出即可
if numrows == 1:
return s
# resultlist為結果的列表形式
resultlist =
gap = 2 * numrows - 2
# 用巢狀迴圈完成計算
for i in range(0, numrows):
temp1 = i
temp2 = gap - i
# 分兩種情況,情況1:第0行和第numrows行。temp1為主列的迴圈
if temp1 == 0 or temp1 == numrows - 1:
while temp1 < len(s):
temp1 = temp1 + gap
# 情況二:除首尾行外的其他行。temp1為主列的迴圈,temp2為插入元素的迴圈
else:
while temp1 < len(s):
temp1 = temp1 + gap
if temp2 < len(s):
temp2 = temp2 + gap
# resultst為未最終返回結果字串結果
resultstr = ''.join(resultlist)
return resultstr
LeetCode 6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 輸入 s pa...
leetcode 6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 示例 1 輸入...
LeetCode 6 Z字形變換
把整個問題拆解為 儲存 取 的兩個過程 通過觀察我發現的是,當numrows為3時,兩列之間的數字的數目為1 當numrows為4時,兩列之間的數字的數目為2,以此類推。那麼,可不可以將每一列都存起來 col 兩列之間的數字也存起來 gap 最後要輸出時再通過遍歷的方式拼接出結果呢?以題目中給的字串...