zoukankan      html  css  js  c++  java
  • [LeetCode] 48. Rotate Image

    You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).

    You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

    Example 1:

    Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
    Output: [[7,4,1],[8,5,2],[9,6,3]]
    

    Example 2:

    Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
    Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
    

    Example 3:

    Input: matrix = [[1]]
    Output: [[1]]
    

    Example 4:

    Input: matrix = [[1,2],[3,4]]
    Output: [[3,1],[4,2]]

    Constraints:

    • matrix.length == n
    • matrix[i].length == n
    • 1 <= n <= 20
    • -1000 <= matrix[i][j] <= 1000

    旋转图像。

    题意是给一个n x n的二维数组,请你将它顺时针九十度旋转。要求in-place做。

    既然规定了要 in-place 做,只能想到对折之类的做法。但是如何对折呢?是先通过对角线对折(左上 - 右下),然后再上下对折。注意对角线对折部分 j 指针是从哪里开始的。

    时间O(n^2)

    空间O(1)

    JavaScript实现

     1 /**
     2  * @param {number[][]} matrix
     3  * @return {void} Do not return anything, modify matrix in-place instead.
     4  */
     5 var rotate = function (matrix) {
     6     let m = matrix.length;
     7     // 左上- 右下对角线交换
     8     for (let i = 0; i < m; i++) {
     9         for (let j = i; j < m; j++) {
    10             let temp = matrix[i][j];
    11             matrix[i][j] = matrix[j][i];
    12             matrix[j][i] = temp;
    13         }
    14     }
    15 
    16     // 左右对折
    17     for (let i = 0; i < m; i++) {
    18         for (let j = 0; j < m / 2; j++) {
    19             let temp = matrix[i][j];
    20             matrix[i][j] = matrix[i][m - 1 - j];
    21             matrix[i][m - 1 - j] = temp;
    22         }
    23     }
    24 };

    Java实现

     1 class Solution {
     2     public void rotate(int[][] matrix) {
     3         // 按左上 - 右下对角线交换
     4         int m = matrix.length;
     5         for (int i = 0; i < m; i++) {
     6             for (int j = i; j < m; j++) {
     7                 int temp = matrix[i][j];
     8                 matrix[i][j] = matrix[j][i];
     9                 matrix[j][i] = temp;
    10             }
    11         }
    12 
    13         // 左右对折
    14         for (int i = 0; i < m; i++) {
    15             for (int j = 0; j < m / 2; j++) {
    16                 int temp = matrix[i][j];
    17                 matrix[i][j] = matrix[i][m - 1 - j];
    18                 matrix[i][m - 1 - j] = temp;
    19             }
    20         }
    21         return;
    22     }
    23 }

    相关题目

    48. Rotate Image

    1886. Determine Whether Matrix Can Be Obtained By Rotation

    LeetCode 题目总结

  • 相关阅读:
    汇编四(习题)
    汇编子程序模块化(near&far)
    win10关闭防火墙
    python中numpy中的shape()的使用
    文件的拷贝linux命令
    python中的os.path.dirname(__file__)
    ubuntu系统下安装及查看opencv版本
    用git命令行克隆项目及出现failed解决方案
    ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '
    记录CenterNet代码编译成功运行
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12306124.html
Copyright © 2011-2022 走看看