程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode Rotate Image

LeetCode Rotate Image

編輯:C++入門知識

LeetCode Rotate Image


LeetCode解題之Rotate Image


原題

將一個矩陣順時針旋轉90度。

注意點:

最好不要申請額外空間

例子:

輸入: matrix = [[1, 2, 3],
[8, 9, 4],
[7, 6, 5]]

輸出: [[7, 8, 1],
[6, 9, 2],
[5, 4, 3]]

解題思路

如果可以申請額外空間,哪怕一個臨時的變量,那只要找一下規律還是很容易實現的。但題目要求最好不要申請額外空間,這就需要技巧了,看到一個很巧妙的方法:先將矩陣沿著對角線翻轉,再上下翻轉,就可以實現順時針旋轉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

兩次翻轉對應的坐標需要細心,不然很容易搞錯。

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]]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved