def convert(s, num_rows):
    """
    :type s: str
    :type numRows: int
    :rtype: str
    LEETCODEISHIRING   numrows=3  columnsdiff_length=2*3-2=4
     L   C   I   R
    E T O E S I I G
    E   D   H   N
    LCIRETOESIIGEDHN

    LEETCODEISHIRING   numrows=4  columnsdiff_length=2*4-2=6
    L     D     R
    E   O E   I I
    E C   I H   N
    T     S     G
    LDREOEIIECIHNTSG
    """
    s_length = len(s)  # 得出要处理的字符的长度
    columnsdiff_length = 2 * num_rows - 2  # 两列之间的差
    result = ""  # 定义排列之后的结果字符

    if num_rows <= 0:
        print("请输入正确的行数,行数必须大于0")

    if s_length == 0 or num_rows == 1:
        print(s)
        return s    # 如果要处理的字符长度是0即为空,或输入的行数等于1时即不需要处理,则返回原字符串

    for i in range(num_rows):  # 从第一行遍历到最后一行
        for j in range(i, s_length, columnsdiff_length):
            result += s[j]  # 第一行和最后一行  还有普通行的整列数字
            if i != 0 and i != num_rows - 1 and j - 2 * i + columnsdiff_length < s_length:
                result += s[j - 2 * i + columnsdiff_length]  # 单列行的数字
    print(result)
    return result


ss = "LEETCODEISHIRING"
convert(ss, 3)
convert(ss, 4)
# convert(ss, 0)
# convert(ss, 1)
# convert(ss, -1)

def convert1(s, num_rows):
    """
         :type s: str
         :type numRows: int
         :rtype: str
         """
    str_length = len(s)
    result = ""
    if num_rows <= 1:
        print(s)
        return s
    for i in range(num_rows):
        c1 = 2 * num_rows - 2 * (i + 1)
        c2 = 2 * i
        cnt = i

        result += s[cnt]
        while cnt < str_length:
            if c1 != 0:
                cnt += c1
                if cnt < str_length:
                    result += s[cnt]
            if c2 != 0:
                cnt += c2
                if cnt < str_length:
                    result += s[cnt]
    print(result)
    return result
s2 = "LEETCODEISHIRING"
convert1(s2, 3)
convert1(s2, 4)