1、当场思考:找规律
当numsRows>=2时,输出 当前字符位置+2*n-2*i和+2*i-2的字符即可,前提是他们不等于0,且加完之后小于字符长度
class Solution:
def convert(self, s: str, numRows: int) -> str:
# 第i行 j+2*n-2*i , j+2*i-2
slen = len(s)
if(slen<=1 or numRows<=1 or slen<=numRows): # 特殊情况
return s
result=[]
for i in range(1,numRows+1):
j=i-1
result.append(s[j])
while(j<slen):
addnum=2*numRows-2*i
j=j + addnum
if(j<slen and j>0 and addnum>0):
result.append(s[j])
addnum=2*i-2
j=j + addnum
if(j<slen and j>0 and addnum>0):
result.append(s[j])
restr=(''.join(result))
return restr
2、模拟行索引变换
https://leetcode-cn.com/problems/zigzag-conversion/solution/zzi-xing-bian-huan-by-jyd/
学习一下大佬的解题
class Solution:
def convert(self, s: str, numRows: int) -> str:
if(len(s)<=1 or numRows<=1 or len(s)<=numRows): # 特殊情况
return s
res = ["" for _ in range(numRows)] # 建立一个数组,大小为numRows
i = 0
flag = -1 # -1是因为现在i=0,需要反转
for c in s:
res[i] += c
if(i>=numRows-1 or i<=0): # 到顶端或底端时反转
flag = -flag
i = i+flag
restr = "".join(res)
return restr