【LeetCode】48. Rotate Image 順時針旋轉矩陣

一、概述

輸入一個n*n矩陣,將其順時針旋轉90度然後輸出。

最簡單的就是兩層for然後一個一個換。簡直麻煩死了,這邏輯會弄得人頭大。

所以我換了一個方法。按層來,然後用swap。

二、分析

如下圖所示:

首先處理最外層的1、2、3、4、5、8、9、12、13、14、15、16,然後處理內層的6、7、10、11。

但是仍要交換四個。麻煩。接着優化:

把四個移動變成三次交換。這樣就簡潔多了。唯一有點麻煩的是交換的元素的座標得好好想一想。代碼如下:

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size();
        int layer=n/2;
        for(int i=0;i<layer;++i)
        {
            for(int j=i;j<n-i-1;++j)
            {
                swap(matrix[i][j],matrix[j][n-i-1]);
                swap(matrix[i][j],matrix[n-i-1][n-j-1]);
                swap(matrix[i][j],matrix[n-j-1][i]);
            }
        }
    }
};

三、總結

沒啥好說的。swap是真的好用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章