题目
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
例:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

方法一:辅助函数
- n 表示矩阵的行/列数
- temp 表示一个行列和给出矩阵 matrix 相同的矩阵,区别在于此矩阵的元素均为零
- 外部循环遍历矩阵 matrix 的行,内部循环遍历矩阵 matrix 的列
- 根据上面的例子我们可以推出:位于矩阵第 i 行第 j 列的元素,在矩阵经过顺时针旋转九十度后 ,该元素的位置为倒数第 i 列第 j 行
- 将新矩阵 temp 赋值给旧矩阵 matrix
※ 因为需要原矩阵 matrix 的地址的内容改变,所以不能直接赋值,直接赋值则会导致 matrix 指向 temp 的地址的内容
class Solution(object):
def rotate(self, matrix):
n = len(matrix)
temp = [[0] * n for row in range(n)]
for i in range(n):
for j in range(n):
temp[j][n-i-1] = matrix[i][j]
matrix[:] = temp
※ 此方法不合题意
方法二:翻转
- n 表示矩阵的行/列数
- 对矩阵 matrix 进行水平翻转,外循环对行遍历,内循环对列遍历
- 位于矩阵第 i 行第 j 列的元素,在矩阵经过水平翻转后 ,该元素的位置为倒数第 i 行第 j 列
- 对矩阵 matrix 进行主对角线翻转,外循环对行遍历,内循环对列遍历
- 位于矩阵第 i 行第 j 列的元素,在矩阵经过主对角线翻转后 ,该元素的位置为第 j 行第 i 列
class Solution(object):
def rotate(self, matrix):
n = len(matrix)
for i in range(n//2):
for j in range(n):
matrix[i][j], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][j]
for i in range(n):
for j in range(i):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
※ 具体例子见链接
相关知识
-
拷贝:
引用拷贝(直接赋值): 二者指向同一对象
浅拷贝: 二者是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
深拷贝: 二者是完全独立的对象
参考
代码相关:https://leetcode.cn/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
拷贝:https://blog.csdn.net/xiaoma_bk/article/details/121466987
网友评论