问题描述:
给定一个 n × n 的二维矩阵
matrix
表示一个图像。请你将图像顺时针旋转 90 度。你必须在 **原地旋转图像,这意味着你需要直接修改输入的二维矩阵。**请不要使用另一个矩阵来旋转图像。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
示例 3:
输入:matrix = [[1]] 输出:[[1]]
示例 4:
输入:matrix = [[1,2],[3,4]] 输出:[[3,1],[4,2]]
实现方式:
def rotate(matrix):
if matrix is None or len(matrix) == 1: # 矩阵为空或为1
return
ls = len(matrix) # 矩阵的高
for i in range(int(ls / 2)): # 索引遍历
begin, end = i, ls - 1 - i # 以高度中线为对称轴两数的索引
for k in range(ls - 2 * i - 1):
temp = matrix[end - k][begin]
matrix[end - k][begin] = matrix[end][end - k]
matrix[end][end - k] = matrix[begin + k][end]
matrix[begin + k][end] = matrix[begin][begin + k]
matrix[begin][begin + k] = temp
print(f"temp=matrix[{end-k}][{begin}]")
print(f"matrix[{end - k}][{begin}] = matrix[{end}][{end - k}]")
print(f"matrix[{end}][{end - k}] = matrix[{begin + k}][{end}]")
print(f"matrix[{begin + k}][{end}] = matrix[{begin}][{begin + k}]")
print(f"matrix[{begin}][{begin + k}] = temp")
print("---"*20)
return matrix
if __name__ == '__main__':
print(rotate([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]))
# print(s.rotate([[1, 2], [3, 4]]))
result:
temp=matrix[3][0]
matrix[3][0] = matrix[3][3]
matrix[3][3] = matrix[0][3]
matrix[0][3] = matrix[0][0]
matrix[0][0] = temp
------------------------------------------------------------
temp=matrix[2][0]
matrix[2][0] = matrix[3][2]
matrix[3][2] = matrix[1][3]
matrix[1][3] = matrix[0][1]
matrix[0][1] = temp
------------------------------------------------------------
temp=matrix[1][0]
matrix[1][0] = matrix[3][1]
matrix[3][1] = matrix[2][3]
matrix[2][3] = matrix[0][2]
matrix[0][2] = temp
------------------------------------------------------------
temp=matrix[2][1]
matrix[2][1] = matrix[2][2]
matrix[2][2] = matrix[1][2]
matrix[1][2] = matrix[1][1]
matrix[1][1] = temp
------------------------------------------------------------
[[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]
Process finished with exit code 0