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);
    }
}
上一篇下一篇

猜你喜欢

热点阅读