LeetCode 48. Rotate Image 陣列90度翻轉(要求空間複雜度)
阿新 • • 發佈:2019-02-11
題目:
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
0 1 2 3
0 1 2 3 4 替換規律 (0,0)->(0,3)->(3,3)->(3,0)->(0,0) 4個為一迴圈
1 5 6 7 8 (1,0)->(0,2)->(2,3)->(3,1)->(1,0)
2 9 10 11 12 (2,0)->(0,1)->(1,3)->(3,2)->(2,0)
3 13 14 15 16
(1,1)->(1,2)->(2,2)->(2,1)->(1,1)
4*4陣列全部替換,綠色為迴圈替換的位置,程式碼如下
另一種方法,從(0,0)到(n-1,n-1)對角線兩側交換,按行逆序輸出也可得到結果(很巧妙)public void rotate(int[][] matrix) { int n = matrix.length-1; for(int j=0;j<=n/2;j++){ for(int i=j;i<n-j;i++){ int x = matrix[i][j]; matrix[i][j] = matrix[n-j][i]; matrix[n-j][i] = matrix[n-i][n-j]; matrix[n-i][n-j] = matrix[j][n-i]; matrix[j][n-i] = x; } } }
public class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i=0; i<n; i++)
for(int j=0; j<i; j++){
int x = matrix[i][j];
matrix[i][j] = matrix[j][i]; //兩個數交換
matrix[j][i] = x;
}
for(int i=0; i<n; i++){
for(int k=0;k<n/2;k++){
int x = matrix[i][k];
matrix[i][k] = matrix[i][n-1-k]; //陣列逆置
matrix[i][n-1-k] = x;
}
}
}
}