48.旋转图像

2024/3/23

# Heading

    48.旋转图像 (opens new window)

    Tags: algorithms amazon apple microsoft array

    Langs: c cpp csharp dart golang java javascript kotlin php python python3 racket ruby rust scala swift typescript

    • algorithms
    • Medium (75.70%)
    • Likes: 1830
    • Dislikes: -
    • Total Accepted: 549.9K
    • Total Submissions: 725.4K
    • Testcase Example: '[[1,2,3],[4,5,6],[7,8,9]]'

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

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

     

    示例 1:

    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    输出:[[7,4,1],[8,5,2],[9,6,3]]
    

    示例 2:

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

     

    提示:

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

     

    /*
     * @lc app=leetcode.cn id=48 lang=javascript
     *
     * [48] 旋转图像
     * 水平翻转+对角线翻转
     */
    
    // @lc code=start
    /**
     * @param {number[][]} matrix
     * @return {void} Do not return anything, modify matrix in-place instead.
     */
    var rotate = function (matrix) {
      const n = matrix.length
      for (let i = 0; i < Math.floor(n / 2); i++) {
        for (let j = 0; j < n; j++) {
          const tmp = matrix[i][j]
          matrix[i][j] = matrix[n - i - 1][j]
          matrix[n - i - 1][j] = tmp
        }
      }
    
      for (let i = 0; i < n; i++) {
        for (let j = i + 1; j < n; j++) {
          const tmp = matrix[i][j]
          matrix[i][j] = matrix[j][i]
          matrix[j][i] = tmp
        }
      }
    }
    // @lc code=end
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /*
     * @lc app=leetcode.cn id=48 lang=javascript
     *
     * [48] 旋转图像
     * 直接找规律,每四个数为一个循环。利用临时变量交换数据
     */
    
    // @lc code=start
    /**
     * @param {number[][]} matrix
     * @return {void} Do not return anything, modify matrix in-place instead.
     */
    var rotate = function (matrix) {
      const n = matrix.length
      // i,j
      // j,n-i-1
      // n-i-1 n-j-1
      // n-j-1,i
      for (let i = 0; i < Math.floor(n / 2); i++) {
        for (let j = 0; j < Math.floor((n + 1) / 2); j++) {
          const tmp = matrix[i][j]
          matrix[i][j] = matrix[n - j - 1][i]
          matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
          matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
          matrix[j][n - i - 1] = tmp
        }
      }
    }
    // @lc code=end
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29