class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if len(s)<=numRows:
            return s
        
        #规律:先向下再向上依次论题,其中向下走是竖直向下走,向上走是
        #为每一行初始化一个字符串
        rows = [""]*numRows

        #初始化一个变量来记录当前是在往下走还是在往上走
        going_down = True
        #初始化一个变量来记录当前是在第几行
        row_pointer = 0

        n = len(s)
        i = 0
        while i<n:
            rows[row_pointer] += s[i]
            #如果当前是往下走,并且已经走到了最后一行,那下一步就应该往上走
            if going_down and row_pointer==numRows-1:
                going_down = False
                row_pointer-=1
            #如果当前是往下走,并且还没到最后一行,那下一步就应该继续往下走
            elif going_down and row_pointer<numRows-1:
                row_pointer+=1
            #如果当前是往上走,并且已经到第一行,那下一步就应该转而往下走
            elif not going_down and row_pointer == 0:
                going_down = True
                row_pointer+=1
            #如果当前是往上走,并且还没到第一行,那下一步就应该继续往上走
            elif not going_down and row_pointer>0:
                row_pointer-=1
            i+=1
        return "".join(rows)




        # return rows