解题思路
用一个n个字符串的数组保存想要的n行,最后输出的时候合并。
第一版
def convert(self, s: str, numRows: int) -> str:
# 初始化空值来存储结果
Result = []
for n in range(numRows):
Result.append("")
if numRows == 1:
return s
Z = numRows + numRows - 2 # Z个元素一个轮询
for i in range(len(s)):
# 把当前的元素添加到Result中
for k in range(Z):
if i % Z == k:
if k < numRows :
j = k
else:
j = j - 1
Result[j]+=s[i]
break
# 构造最终结果
for n in range(1,numRows):
Result[0]+=(Result[n])
return Result[0]
第二版改进
减少了中间循环判断的。
def convert(self, s: str, numRows: int) -> str:
# 初始化空值来存储结果
Result = []
for n in range(numRows):
Result.append("")
if numRows == 1:
return s
Z = numRows + numRows - 2 # Z个元素一个轮询
k = 0
for i in range(len(s)):
# 把当前的元素添加到Result中
# for k in range(Z):
if i % Z == k:
if k < numRows :
j = k
else:
j = j - 1
Result[j]+=s[i]
if k < Z-1:
k +=1
else:
k = 0
# 构造最终结果
for n in range(1,numRows):
Result[0]+=(Result[n])
return Result[0]
再次改进
只需要把输出结果的循环改变以下 就可以节省一些时间
# 构造最终结果
# for n in range(1,numRows):
# Result[0]+=(Result[n])
return ''.join(Result)