image.png

思路:

  • 依然可以想象“剥洋葱”,从外到内分成许多层,每一层都顺时针翻转,那么整体就顺时针翻转。相当于一个操作给多个对象重复很多次,所以自然联想到递归。
  • 利用一个temp数据去存储临时的位置,然后逐层去翻转,细节还是挺麻烦的,不要乱,要看好顺序。

image.png

代码:

  1. class Solution:
  2. def externalRotate(self, matrix: List[List[int]], topleft_row, topleft_col, bottomright_row, bottomright_col) -> None:
  3. if topleft_row >= bottomright_row or topleft_col >= bottomright_col:
  4. return
  5. level_len = bottomright_col - topleft_col
  6. for index in range(level_len):
  7. temp = matrix[topleft_row][topleft_col + index]
  8. matrix[topleft_row][topleft_col + index] = matrix[bottomright_row - index][topleft_col]
  9. matrix[bottomright_row - index][topleft_col] = matrix[bottomright_row][bottomright_col - index]
  10. matrix[bottomright_row][bottomright_col - index] = matrix[topleft_row + index][bottomright_col]
  11. matrix[topleft_row + index][bottomright_col] = temp
  12. self.externalRotate(matrix, topleft_row + 1, topleft_col + 1, bottomright_row - 1, bottomright_col - 1)
  13. def rotate(self, matrix: List[List[int]]) -> None:
  14. """
  15. Do not return anything, modify matrix in-place instead.
  16. """
  17. self.externalRotate(matrix, 0, 0, len(matrix) - 1, len(matrix) - 1)