题目来源于leetcode,自行搜索
首先要找到每一行各字符之间的关系
比如第二行对应的下标分别为 1 5 7 11 13
第三行对应的下标分别为 2 4 8 10 14
可以归纳总结出对应的两个公式:较远的为(numRows-1)*2 – 2(i-1) = 2numRows – 2i
较近的为:2 * ( i – 1 ) = 2i – 2
当为第一行的时候较近的公式为0 判断后进行跳过
当为最大一行时较远的公式为0 判断后进行跳过
使用while循环进行不断地叠加,当最后叠加出来的字符串长度大于len(s)时结束
def func(s,numRows):
if numRows <= 1 or len(s) <= numRows:
return s
result = ""
lens = len(s) - 1
for i in range(1,numRows+1):
far = 2 * numRows - 2 * i
low = 2 * i - 2
#因为行数从1开始所以减一
cur = i - 1
result += s[cur]
while cur <= lens:
#判断为0 进行跳过
if far != 0:
cur += far
if cur <= lens:
result += s[cur]
#判断为0 进行跳过
if low != 0:
cur += low
if cur <= lens:
result += s[cur]
return result