给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。(这次没有抄,都是我写的)
class Solution(object):
def rotate1(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
length = len(matrix)
data_list = ["0"] * (length ** 2)
for i in range(length):
for j in range(length):
# 其实最主要的就是这个计算first_index和second_index的过程
first_index = j # 根据旋转90度退出j会变为i
second_index = abs(i-length + 1) # i-数组长度的绝对值会变成j
data_list[first_index * length + second_index] = matrix[first_index][second_index]
if data_list[i * length + j] != "0":
exchange_num = data_list[i * length + j]
else:
exchange_num = matrix[i][j]
matrix[first_index][second_index] = exchange_num
def rotate2(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
length = len(matrix)
data_list = ["0"] * (length ** 2)
for i in range(length):
for j in range(length):
first_index = j
second_index = abs(i-length + 1)
data_list[first_index * length + second_index] = matrix[i][j]
for i in range(length ** 2):
i, j = divmod(i, length)
matrix[i][j] = data_list[i * length + j]
def rotate(self, matrix) -> None:
n = len(matrix)
# Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
matrix_new = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
matrix_new[j][n - i - 1] = matrix[i][j]
# 不能写成 matrix = matrix_new
matrix[:] = matrix_new
if __name__ == '__main__':
s = Solution()
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
matrix = [
[43,39,3,33,37,20,14],
[9,18,9,-1,40,22,38],
[14,42,3,23,12,14,32],
[18,31,45,11,8,-1,31],
[28,44,14,23,40,24,13],
[29,45,33,45,20,0,45],
[12,23,35,32,22,39,8]]
matrix = [
[5, 1, 9, 11],
[2, 4, 8, 10],
[13, 3, 6, 7],
[15, 14, 12, 16]
]