Python symmetric matrix rotate 90 degrees clockwise

Method 1: This method starts to read from the bottom right corner to the top, and then reads to the left in turn, but the time complexity is too high, it is recommended to see method 2

# 把对称矩阵顺时针旋转90度
# 该法问从左下角往上读取,再重新构造矩阵,时间复杂度叫高
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
# 旋转为
        # [[7,4,1],
        #  [8,5,2],
        #  [9,6,3]]
lt = []
le = 0  # len(matrix)


def printInfo(mat):
    i = 0
    while i < le:
        j = 0
        while j < le:
            if j == le-1:
                print(mat[i][j], end="")
            else:
                print(mat[i][j], end="  ")
            j += 1
        print()
        i += 1


def change_matrix(mat):
    rotating_matrix = [[1 for j in range(le)] for i in range(le)]
    i = le - 1
    j = 0
    for x in range(le * le):  # 每次从左向右从下往上读取即可
        if i == -1:
            i = le - 1
            j = j + 1
        lt.append(mat[i][j])
        i = i - 1
    ind = 0
    for k in range(0, le):
        for y in range(0, le):
            r = lt[ind]
            rotating_matrix[k][y] = r
            ind += 1
    return rotating_matrix


def input_matrix(mat):
    for i in range(0, le):
        mat[i] = input().split(" ")
    return mat


if __name__ == '__main__':
    le = int(input())

    matrix = [[0] * le] * le
    matrix = input_matrix(matrix)
    rotating_matrix = change_matrix(matrix)
    printInfo(rotating_matrix)

Method 2: Flip the main diagonal (upper left corner - lower right corner) first, and then flip horizontally (left and right)

# 先对角线交换,再垂直交换
# [[2,3,4],
# [5,6,7],
# [8,9,1]]
# 翻转90度为
# [[8,5,2],
# [9,6,3],
# [1,7,4]]
# 1先对角线翻转为
# [[2,5,8],
# [3,6,9],
# [4,7,1]]
# 2再水平翻转
# [[8,5,2],
# [9,6,3],
# [1,7,4]]
# 4*4
# [[8,5,2,9],
#  [9,6,3,8],
#  [1,7,4,4],
#  [1,7,4,4]]

# 几层矩阵值,矩阵
def rotatin(n, matrix):
    mat = matrix
    # 对角线翻转
    # 0,0 0,1<=>1,0 0,2<=>2,0
    for i in range(n):
        for j in range(n - i):
            mat[i][j + i], mat[j + i][i] = mat[j + i][i], mat[i][j + i]
    # 水平翻转
    for x in range(n):
        for y in range(n // 2):  # 第一个与倒数第一个交换
            mat[x][y], mat[x][-y - 1] = mat[x][-y - 1], mat[x][y]
    return mat


if __name__ == '__main__':
    n = int(input("输入矩阵数:"))
    # matrix = [[2, 3, 4],
    #           [5, 6, 7],
    #           [8, 9, 1]]
    matrix = []
    for i in range(n):
        lt = list(map(int, input("第" + str(i + 1) + "行矩阵:").split(" ")))
        matrix.append(lt)
    matr = rotatin(n, matrix)
    for i in range(n):
        for j in range(n):
            if j == n - 1:
                print(matr[i][j], end="")
            else:
                print(matr[i][j], end="  ")
        print()

running result

 

Guess you like

Origin blog.csdn.net/baidu_39105563/article/details/121950809