【LeetCode】【Python題解】Rotate Image
阿新 • • 發佈:2019-02-13
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
我的解法非常簡潔,就用了一行程式碼,就是將給定的matrix重新整合,生成了一個新的matrix返回,所以並不是in-place的解法,但優點是十分的簡潔,賞心悅目!
class Solution: # @param matrix, a list of lists of integers # @return a list of lists of integers def rotate(self, matrix): return map(lambda x:map(lambda y:y.pop(0),matrix[::-1]),range(len(matrix)))
再分享一個看到的非常帥的解法,這個演算法就是in-place的了
#include <algorithm> class Solution { public: void rotate(vector<vector<int> > &matrix) { reverse(matrix.begin(), matrix.end()); for (unsigned i = 0; i < matrix.size(); ++i) for (unsigned j = i+1; j < matrix[i].size(); ++j) swap (matrix[i][j], matrix[j][i]); } };
乍一看非常難懂,就感覺只是以矩陣的對角線為軸交換了兩邊的畫素點。其實不是。非常關鍵的一步是reverse()函式,它將matrix翻轉了。如果你在紙上寫一個nxn的矩陣(反正我是寫下來才明白的),reverse之後相當於是把紙翻轉過來,而且不是沿長邊翻轉,而是沿短邊翻轉(就是不是翻書那種翻轉,而是縱向從底部向上的那種翻轉),這樣翻轉之後最底部一行自然就成了最頂部一行。
第二步就是swap對角線兩側的元素,這樣又是一次翻轉,這次翻轉更復雜一些,是沿矩陣對角線的一次翻轉(也可以說是沿紙的對角線)
這時你會發現其實這就是把紙順時針旋轉了90度。