LeetCode 48.旋轉影象
阿新 • • 發佈:2020-12-20
解題思路
設圖形旋轉點為(0,0),圖形中點(x,y)在旋轉後坐標(x’,y’),有
x’=y
y’=-x
根據如上規律,把矩陣放到座標系裡面。n為奇數時 x=y=(n-1)/2就是中心點。將中心點歸到原點,其他二維陣列都減去都減去此值。
最後一層一層往裡面應用上面的規律,首先是(0,0)然後(0,1)。。。。外層算完接著算裡面一層(1,1)(1,2)…直到全部算完。
執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
記憶體消耗:38.5 MB, 在所有 Java 提交中擊敗了81.18%的使用者
程式碼
class Solution {
public void rotate(int[][] matrix) {
int x = 0, y = 0;
int x_ = 0;
int y_ = 0;
int t1 = 0;
int t2 = 0;
double center = (matrix.length - 1) / 2.0;
for (int i = 0; i < (matrix.length >> 1); i++) {
for (int j = 0; j < matrix.length - ((i << 1) + 1); j++) {
x = i;
y = j + i;
x_ = y;
y_ = (int) ((2 * center) - x);
t1 = matrix[x_][y_];
matrix[x_][y_] = matrix[x][y];
x = x_;
y = y_;
x_ = y;
y_ = (int) ((2 * center) - x);
t2 = matrix[x_][y_];
matrix[x_][y_] = t1;
x = x_;
y = y_;
x_ = y;
y_ = (int) ((2 * center) - x);
t1 = matrix[x_][y_];
matrix[x_][y_] = t2;
x = x_;
y = y_;
x_ = y;
y_ = (int) ((2 * center) - x);
matrix[x_][y_] = t1;
}
}
}
}