题目
本题具体要求见Leetcode-q48。
解题思路
这道题的主要做法就是坐标计算,计算哪个点会被映射到哪个位置,然后根据位置来进行变量的变化。
推算坐标关系的时候,千万不要用最外圈算,特别容易忽略start=0这个事实,一定要用里面的圈来算。
另外,这道题还可以进一步提升空间利用率,那就是把三个tmp合成两个。
代码
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
numLoop = n // 2
for line_start in range(numLoop):
line_end = n - line_start - 1
for i in range(line_start, line_end):
tmp_upRight = matrix[i][line_end]
tmp_downRight = matrix[line_end][line_end - i + line_start]
tmp_downLeft = matrix[line_end - i + line_start][line_start]
matrix[i][line_end] = matrix[line_start][i]
matrix[line_end][line_end - i + line_start] = tmp_upRight
matrix[line_end - i + line_start][line_start] = tmp_downRight
matrix[line_start][i] = tmp_downLeft
return