【leetcode】48. 旋转图像

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

给定一个 n × n 的二维矩阵表示一个图像。



将图像顺时针旋转 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]
]


解题思路:



1.转置加翻转

2.旋转四个矩形


1.转置加翻转


  • 时间复杂度:O(N2)
  • 空间复杂度:O(1)


/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    let matrixLen = matrix.length; //行数
    /* 转置二维数组 */
    for (var i = 0; i < matrixLen; i++) {
        for (var j = i; j < matrixLen; j++) {
            let temp = matrix[i][j]
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
    /* 反转数组 */
    return matrix.map(item => item.reverse())
};


2.旋转四个矩形



将给定的矩阵分成四个矩形并且将原问题划归为旋转这些矩形。


1.JPG


/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var rotate = function(matrix) {
    let matrixLen = matrix.length; //行数
    /* 转置二维数组 */
    for (var i = 0; i < matrixLen; i++) {
        for (var j = i; j < matrixLen; j++) {
            let temp = matrix[i][j]
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
    /* 反转数组 */
    return matrix.map(item => item.reverse())
};
相关文章
|
1月前
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
|
1月前
|
存储 算法
LeetCode第48题旋转图像
LeetCode第48题"旋转图像"的解题方法,通过两次翻转操作——先水平翻转再对角线翻转,实现了原地旋转矩阵的效果。
LeetCode第48题旋转图像
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 11. 旋转数组的最小数字
解决剑指Offer 11题 "旋转数组的最小数字" 的三种Python实现方法:直接使用min函数、线性查找分界点和二分查找法,以找出旋转数组中的最小元素。
35 2
|
3月前
|
存储 算法 数据可视化
深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)
深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)
|
3月前
|
存储 算法 数据可视化
|
3月前
|
机器学习/深度学习 存储
力扣经典150题第三十六题:旋转图像
力扣经典150题第三十六题:旋转图像
25 0
|
3月前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
|
3月前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
3月前
|
存储 算法 数据挖掘
LeetCode 题目 81:搜索旋转排序数组 II
LeetCode 题目 81:搜索旋转排序数组 II
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
42 6