方法1:この方法は、右下隅から上に向かって読み取りを開始し、次に左に向かって読み取りを開始しますが、時間計算量が高すぎるため、方法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)
方法2:最初に主対角線(左上隅-右下隅)を反転し、次に水平方向(左右)に反転します。
# 先对角线交换,再垂直交换
# [[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()
実行結果