LeetCode解題之Rotate Image
原題
將一個矩陣順時針旋轉90度。
注意點:
- 最好不要申請額外空間
樣例:
輸入: matrix = [[1, 2, 3],
[8, 9, 4],
[7, 6, 5]]
輸出: [[7, 8, 1],
[6, 9, 2],
[5, 4, 3]]
解題思路
假設能夠申請額外空間,哪怕一個暫時的變數,那僅僅要找一下規律還是非常easy實現的。但題目要求最好不要申請額外空間,這就須要技巧了,看到一個非常巧妙的方法:先將矩陣沿著對角線翻轉,再上下翻轉。就能夠實現順時針旋轉90度的效果。詳細看例如以下的樣例:
1 2 3 5 4 3 7 8 1
8 9 4 -> 6 9 2 -> 6 9 2
7 6 5 7 8 1 5 4 3
兩次翻轉相應的座標須要細心。不然非常easy搞錯。
AC原始碼
class Solution(object):
def rotate(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for row in range(n):
for column in range(n - row):
matrix[row][column], matrix[n - 1 - column][n - 1 - row] = matrix[n - 1 - column][n - 1 - row], \
matrix[row][column]
for row in range(n // 2):
for column in range(n):
matrix[row][column], matrix[n - 1 - row][column] = matrix[n - 1 - row][column], matrix[row][column]
# No need, just to test
return matrix
if __name__ == "__main__":
assert Solution().rotate([[1, 2, 3], [8, 9, 4], [7, 6, 5]]) == [[7, 8, 1], [6, 9, 2], [5, 4, 3]]
歡迎檢視我的Github (https://github.com/gavinfish/LeetCode-Python) 來獲得相關原始碼。