美文网首页
LeetCode 第48题:旋转图像

LeetCode 第48题:旋转图像

作者: 放开那个BUG | 来源:发表于2020-07-05 12:20 被阅读0次

    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);
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第48题:旋转图像

          本文链接:https://www.haomeiwen.com/subject/pckvfktx.html