一、概述
輸入一個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是真的好用。