题目:
解法:
这道题算是一道观察题吧...我们计算出每一行的字符串,最后再把各行字符串拼接起来。循环是和行数numRow有关的,每隔(numRow2-2)个字母循环一次。根据当前索引对(numRow2-2)取余,来确定当前字母在哪一行。可以看出:当取余后的结果小于行数时,余数就是对应的行数;当取余后的结果大于行数时,要通过余数变换到对应的行数,即新行数=(numRow*2-2)-余数。
具体代码如下:
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows==1:
return s
s_len = len(s) # 整个字符长度
s_rows = [""] * numRows # 每一行的字符串
loop_num = 2*numRows-2 # 循环长度
for i in range(s_len):
remainder = i % loop_num
if remainder >= numRows:
remainder = loop_num - remainder
#print(s[i],remainder)
s_rows[remainder] += s[i]
return "".join(s_rows)