找规律:
数学规律找到了,接下来的难点就是代码实现。
一共需要两层循环,外层循环为n行,内循环为字符串长度;python当中字符串是可以直接相加的(字符串相加就是拼接);注意观察奇数行号的规律是成波动性的,两个波动数相加刚好为n+2,所以需要用一个flag标记当前波动位置;当循环到第0行和最后一行时,规律显然是一样的,所以单独处理。
代码如下:
class Solution:
def convert(self, s: str, numRows: int) -> str:
a = ''
if(len(s)==1 or numRows==1): ## 边界情况处理
return s
elif(numRows>len(s)):
numRows = len(s)
for i in range(numRows):
a = a+s[i]
c = i
flag=0 ## 每次重置标记
for j in range(1,len(s)):
if(i==0 or i==numRows-1): ## 第一行和最后一行
if(c+2*(numRows-1)<len(s)):
c = c+2*(numRows-1)
a = a+s[c]
else:
if(flag == 0 and c+2*(numRows-i-1)<len(s)):
c = c+2*(numRows-i-1)
a = a+s[c]
flag=1
elif(flag==1 and c+2*(numRows-(numRows-i))<len(s)):
c = c+2*(numRows-(numRows-i))
a = a+s[c]
flag=0
return a
执行通过: