タイトル説明(中難易度)
マトリックスは、時計回りに90度回転し、余分なスペースを使用しません。おそらくそれを観察する、という一般的なアイデアはありません、質問の法則を見つけるために属しています。
Aソリューション
最初の交換を切り替えるについて、各列の対称そして、移調することができます。
public void rotate(int[][] matrix) {
//以对角线为轴交换
for (int i = 0; i < matrix.length; i ) {
for (int j = 0; j <=i; j ) {
if (i == j) {
continue;
}
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
//交换列
for (int i = 0, j = matrix.length - 1; i < matrix.length / 2; i , j--) {
for (int k = 0; k < matrix.length; k ) {
int temp = matrix[k][i];
matrix[k][i] = matrix[k][j];
matrix[k][j] = temp;
}
}
}
時間の複雑さ:O(n²)。
複雑スペース:O(1)。
あなたは、まず対角線に切り替え、回線交換の対称軸に対して横方向に軸線することができます。
ソリューション2
私は、この置くリンクをアイデアは内部のコメントはまた、グラフがよく、ライトの上に掲示する機会を取る、オーバー掲載しました。
ループ交換の周りのサークルは、それは素晴らしいです!
public void rotate(int[][] matrix) {
int n=matrix.length;
for (int i=0; i<n/2; i )
for (int j=i; j<n-i-1; j ) {
int tmp=matrix[i][j];
matrix[i][j]=matrix[n-j-1][i];
matrix[n-j-1][i]=matrix[n-i-1][n-j-1];
matrix[n-i-1][n-j-1]=matrix[j][n-i-1];
matrix[j][n-i-1]=tmp;
}
}
時間の複雑さ:O(n²)。
複雑スペース:O(1)。
全体的な
この質問はそれに観測された機能の対象です。
人気のより詳細な説明についてはleetcode.wang。