示例1:
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" Explanation: P A H N A P L S I I G Y I R示例2:
Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
解题思路:
本题题意理解起来非常困难。
反复阅读之后,意思是要S形排列。
那不是很简单么= =
if numRows == 1:
return s
arr = []
for i in range(numRows):
arr.append('')
lenth = len(s)
for i in range(lenth):
loc = i % ((numRows - 1) * 2)
if loc < numRows:
arr[loc] = arr[loc] + s[i]
else:
arr[(numRows- 1) * 2 - loc] = arr[(numRows- 1) * 2 - loc] + s[i]
# print(arr)
res = ''
for i in range(numRows):
res = res + arr[i]
return res
148 ms,打败了29.81%的对手。
解题思路1:
优化了下代码:
if numRows == 1:
return s
arr = [''] * numRows
lenth = len(s)
period = (numRows - 1) * 2
for i in range(lenth):
loc = i % period
if loc < numRows:
arr[loc] += s[i]
else:
arr[period - loc] += s[i]
# print(arr)
res = ''.join(arr)
return res
76 ms,打败了99.37%的对手。
嗯,像这样简单的题,微小的优化也是很重要的。
解题思路2:
读了下排名最前的代码:
if numRows == 1 or numRows >= len(s):
return s
L = [''] * numRows
index, step = 0, 1
for x in s:
L[index] += x
if index == 0:
step = 1
elif index == numRows -1:
step = -1
index += step
return ''.join(L)
与我的主要差异在于,判断回文时,我使用了复杂的数学题,而靠前代码使用的是index的+1再-1。
值得学习。
本文探讨了一种将字符串以S形排列的算法,并通过代码优化实现了显著的性能提升。从最初的148ms到优化后的76ms,展示了如何通过简化代码结构和逻辑判断来提高算法效率。
2701

被折叠的 条评论
为什么被折叠?



