[每日一题] 12.27 - N字形变换

N字形变换

[每日一题] 12.27 - N字形变换_第1张图片
我利用的是W型栅栏加密来进行转换
其实只要把N字形里面的字母挪一下便能变成W字形
尽管字形变换了,但输出的密文是不变的

def convert(s, numRows):
    if numRows == 1:
        return s
    array = [[0]*len(s) for i in range(numRows)] #生成初始矩阵
    row = 0
    upflag = False
    for col in range(len(s)): #在矩阵上按w型画出s
        array[row][col] = s[col]
        if row == numRows-1:
            upflag = True
        if row == 0:
            upflag = False
        if upflag:
            row -= 1
        else:
            row += 1

    return ''.join(ch for row in array for ch in row if ch)

参考官方:

def generate_n(s,n):
    if n == 1 or len(s) == n:
        return s
    temp_row = n # 行数
    
    # 每一个小块有n - 1列
    # 每一个小块有n + n - 2个字符
    temp = (len(s) // (n + n - 2)) # 总小块数
    if len(s) % (n + n - 2) != 0:
        temp = temp + 1
    temp_col = temp * (n - 1) # 总共的列数
    array = [[0] * temp_col for _ in range(temp_row)]

    row,col = 0,0
    for i , ch in enumerate(s):
        array[row][col] = ch
        if i % (n + n - 2) < temp_row - 1:
            row += 1 # 向下移
        else:
            row -= 1
            col += 1 # 向右上移
    return ''.join(ch for row in array for ch in row if ch)

你可能感兴趣的:(算法,python,算法,python)