LeetCode 第48题:旋转图像
2020-07-05 本文已影响0人
放开那个BUG
1、前言
题目描述2、思路
这个题目最重要的是推断出数组的数字翻转90度后,原位置 [i,j] 与对应翻转位置的关系。可以很明显的得出位置 [i,j] 其他三个对应位置为:[j][n - 1 - i]、[n - 1 - i][n - 1 - j]、[n - 1 - j][i]。然后记录下那些位置已经替换了,替换的不再替换。
但是题目要求了不能使用额外空间,所以这边记录是不对的,所以只能是原地替换。我们模拟一边可知,只需要旋转前半行就行。
3、代码
public class Q48_Rotate {
public void rotate(int[][] matrix) {
if(matrix == null || matrix[0].length == 0){
return;
}
int n = matrix.length;
// 因为是对称的,所以只需要前半行
for(int i = 0; i < n / 2; i++){
for(int j = i; j < n - i - 1; j++){
int temp = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = matrix[i][j];
matrix[i][j] = temp;
}
}
}
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
new Q48_Rotate().rotate(matrix);
}
}