0
点赞
收藏
分享

微信扫一扫

Day28 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度

https://leetcode-cn.com/problems/rotate-image/

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像

示例1:

示例2:

示例3:

示例4:

提示:

Java解法

package sj.shimmer.algorithm.ten_3;

import sj.shimmer.algorithm.Utils;

/**
 * Created by SJ on 2021/2/21.
 */

class D28 {
    public static void main(String[] args) {
        int[][] matrix = {
//                new int[]{1, 2, 3},
//                new int[]{4, 5, 6},
//                new int[]{7, 8, 9},
//                new int[]{1, 2, 3, 4},
//                new int[]{5, 6, 7, 8},
//                new int[]{9, 10, 11, 12},
//                new int[]{13, 14, 15, 16},
//                new int[]{1, 2, 3, 4, 5},
//                new int[]{6, 7, 8, 9, 10},
//                new int[]{11, 12, 13, 14, 15},
//                new int[]{16, 17, 18, 19, 20},
//                new int[]{21, 22, 23, 24, 25},
                new int[]{2, 29, 20, 26, 16, 28},
                new int[]{12, 27, 9, 25, 13, 21},
                new int[]{32, 33, 32, 2, 28, 14},
                new int[]{13, 14, 32, 27, 22, 26},
                new int[]{33, 1, 20, 7, 21, 7},
                new int[]{4, 24, 1, 6, 32, 34},
        };
        rotate(matrix);
        for (int[] ints : matrix) {
            Utils.logArray(ints);
        }
    }

    public static void rotate(int[][] matrix) {
        if (matrix == null || matrix.length == 1) {
            return;
        }
        int length = matrix.length;
        for (int k = 0; k < length / 2 + 1; k++) {        //需要遍历的圈数 length/2
            for (int i = k; i < length - 1 - k; i++) {
                int temp = matrix[k][i];
                matrix[k][i] = matrix[length - 1 - i][k];
                matrix[length - 1 - i][k] = matrix[length - 1 - k][length - 1 - i];
                matrix[length - 1 - k][length - 1 - i] = matrix[i][length - 1 - k];
                matrix[i][length - 1 - k] = temp;
            }
        }
    }
}

官方解

https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/

  1. 使用辅助数组

    • 时间复杂度:O(N^2)
    • 空间复杂度:O(N^2)
  2. 原地旋转

    • 时间复杂度:O(N^2)
    • 空间复杂度:O(1)
  3. 用翻转代替旋转

    • 时间复杂度:O(N^2)
    • 空间复杂度:O(1)
举报

相关推荐

0 条评论