題目:給定乙個n*n的矩陣matrix,求把這個矩陣調整成順時針轉動90度後的形式。
例如:1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
順時針轉動90度後為:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
要求:額外空間複雜度為o(1)
解答:這裡任然使用分圈處理的方式,在矩陣中用左上角的座標(tr,tc)和右下角的座標(dr,dc)就可以表示乙個子矩陣。題目中的矩陣,當(tr,tc)=(0,0)、(dr,dc)=(3,3)時,表示的子矩陣就是整個矩陣,這個子矩陣最外層的部分如下:
1 2 3 4
5 8
9 12
13 14 15 16
在這個外圈中,1,4,16,13為一組,然後1佔據4的位置,4佔據16的位置,16佔據13的位置,13佔據1的位置,一組就調完了。然後2,8,15,9為一組,繼續調整的過程,最後3,12,14,5為一組,繼續佔據調整過程。然後(tr,tc)=(0,0)、(dr,dc)=(3,3)的子矩陣外層調整完畢。接下來令tr和tc加1,(tr,tc)=(1,1),令dr,dc減1,即(dr,dc)=(2,2),此時表示的子矩陣如下.
6 7
10 11
這個外層只有一組,佔據調整之後就可以了。所以如果子矩陣的大小是m*m,一共就有m-1組,分別進行調整即可。
具體過程請參看如下**的rotate方法:
1view codepublic
void rotate(int
matrix)23
1819
2021
public
void rotateedge(int m,int tr,int tc,int dr,int
dc)22
234445}
4647
將正方形矩陣順時針旋轉90度
將正方形矩陣順時針旋轉90度 給定乙個n n的矩陣matrix,請把這個矩陣順時針轉動90度。輸入描述 輸入包含多行,第一行乙個整數n 1 n 200 n 1 leq n leq 200 n 1 n 200 代表矩陣的行數和列數,接下來n行,每行n個整數,代表矩陣mat rix 1 ma trix ...
矩陣順時針轉動90度
輸入描述 輸入包含多行,第一行乙個整數n 1 n 200 代表矩陣的行數和列數,接下來n行,每行n個整數,代表矩陣matrix 1 matrix i j 40000 輸出描述 輸出旋轉後的矩陣 包含n行,每行n個數 示例1輸入 41 2 3 4 5 6 7 8 9 10 11 12 13 14 15...
Java實現矩陣順時針旋轉90度
實現矩陣的轉置較為容易,只需要將縱橫下標互換即可。實現矩陣旋轉稍微麻煩一點。解題思路 矩陣轉換90度,則原矩陣的縱下標轉變為新矩陣的橫下標 原矩陣的橫下標轉變為新矩陣的縱下標,並且順序相反。public class rotation public static int change int matr...