思路:
- 依然可以想象“剥洋葱”,从外到内分成许多层,每一层都顺时针翻转,那么整体就顺时针翻转。相当于一个操作给多个对象重复很多次,所以自然联想到递归。
- 利用一个
temp
数据去存储临时的位置,然后逐层去翻转,细节还是挺麻烦的,不要乱,要看好顺序。
代码:
class Solution:
def externalRotate(self, matrix: List[List[int]], topleft_row, topleft_col, bottomright_row, bottomright_col) -> None:
if topleft_row >= bottomright_row or topleft_col >= bottomright_col:
return
level_len = bottomright_col - topleft_col
for index in range(level_len):
temp = matrix[topleft_row][topleft_col + index]
matrix[topleft_row][topleft_col + index] = matrix[bottomright_row - index][topleft_col]
matrix[bottomright_row - index][topleft_col] = matrix[bottomright_row][bottomright_col - index]
matrix[bottomright_row][bottomright_col - index] = matrix[topleft_row + index][bottomright_col]
matrix[topleft_row + index][bottomright_col] = temp
self.externalRotate(matrix, topleft_row + 1, topleft_col + 1, bottomright_row - 1, bottomright_col - 1)
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
self.externalRotate(matrix, 0, 0, len(matrix) - 1, len(matrix) - 1)