旋轉(zhuǎn)矩陣
給你一幅由N × N
矩陣表示的圖像劣欢,其中每個像素的大小為 4 字節(jié)矫夯。請你設(shè)計一種算法,將圖像旋轉(zhuǎn) 90 度叛溢。
不占用額外內(nèi)存空間能否做到膏潮?
示例 1:
給定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)?
[
[7,4,1],
[8,5,2],
[9,6,3]
]示例 2:
給定 matrix =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],原地旋轉(zhuǎn)輸入矩陣掌腰,使其變?yōu)?
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]作者:力扣 (LeetCode)
鏈接:https://leetcode-cn.com/leetbook/read/array-and-string/clpgd/
來源:力扣(LeetCode)
著作權(quán)歸作者所有狰住。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處齿梁。
思路
旋轉(zhuǎn)關(guān)系的求解是這個題的重中之重催植,一開始我一直在嘗試畫幾個矩陣找規(guī)律找感覺,效率未免有點低勺择。
從平面幾何的角度创南,旋轉(zhuǎn)后的兩個向量內(nèi)積為0,可以以矩陣中心為原點建立正交坐標(biāo)系酵幕,用內(nèi)積尋找旋轉(zhuǎn)前后的坐標(biāo)關(guān)系扰藕,再將坐標(biāo)關(guān)系換算為索引下標(biāo)的關(guān)系。同時討論矩陣維數(shù)分別為奇數(shù)和偶數(shù)的兩種情況芳撒。
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
if(n == 0) { return; }
int r = (n>>1)-1; //左上角區(qū)域的最大行下標(biāo)邓深,
int c = (n-1)>>1; //左上角區(qū)域的最大列下標(biāo)未桥,行列下標(biāo)從 0 開始。
for(int i = r; i >= 0; --i) {
for(int j = c; j >= 0; --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]);
}
}
}
};
作者:Time-Limit
鏈接:https://leetcode-cn.com/problems/rotate-matrix-lcci/solution/c-tu-jie-yuan-di-cao-zuo-ji-bai-shuang-bai-vv-by-t/
來源:力扣(LeetCode)
著作權(quán)歸作者所有芥备。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)冬耿,非商業(yè)轉(zhuǎn)載請注明出處。
還有一種思路是用兩次翻轉(zhuǎn)等效一次旋轉(zhuǎn)萌壳,按中垂線翻轉(zhuǎn)一次之后再按/
對角線翻轉(zhuǎn)也能實現(xiàn)題目要求的效果亦镶。