思路就是找数学规律,每个数字存入list中,最后变成字符串打印出来。50分钟
class Solution:
def convert(self, s: str, numRows: int) -> str:
if(numRows==1): return s #特殊情况,等于1的时候会除0异常
T = numRows * 2 - 2
list = [[] for i in range(numRows)] # 动态生成列表的个数
result='' # 字符串要初始化
for i in range(len(s)):
t = i % T # 在每个周期里的序号
if (t < numRows): # 往下的
list[t].append(s[i])
else: # 回退
list[numRows -1- (t+1 )% numRows].append(s[i]) # 序号从零开始要注意
for i in range(numRows):
result += ''.join(list[i]) #print(''.join(list[i])) # list与字符串之间的转换
return result
没有找规律的版本,手动控制指针上下的方向 ,思考比较简单。20分钟
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows==1: return s
result_list=[[] for i in range(numRows)]
cur_row=0
for c in s:
result_list[cur_row].append(c)
if cur_row==numRows-1: go_down=False # 注意序号从0开始,没有减一
elif cur_row==0: go_down=True
cur_row+=1 if go_down else -1 # 注意numRows=1这里会出界
ret='' # 字符串要初始化
for lis in result_list:
ret+=''.join(lis)
return ret