JavaScript数组操作之旋转二维数组

 更新时间:2022年04月26日 16:31:25   作者:掘金安东尼  
这篇文章主要介绍了JavaScript数组操作之旋转二维数组,主要从两个方面展开文章介绍,一是通过对数组的操作熟练度;二是(镜像反转)比实现一更优,减少了空间复杂度,内容介绍具有一定的参考价值,需要的小伙伴可以参考一下

一、题目描述

给定一个 n × 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]]

二、思路与实现

从示例图中就可以知道:

数组顺时针旋转 90 度之后,其实就是第1列变成第1行,第2列变成第2行,第3列变成第3行......

实现一:

/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function (matrix) {
let n = matrix.length;
let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
for (let i = 0; i < n; i++)
for (let j = n - 1; j >= 0; j--) res[i][n - j - 1] = matrix[j][i];
return res;
};

时间复杂度:O(N^2),其中N为matrix的边长
空间复杂度:O(N^2)。我们需要使用一个和 matrix 大小相同的辅助数组。

还有另外一种思路:

  • 按照左上到右下的对角线进行镜像对称
  • 对矩阵的每一行进行反转

比如这样:

/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function (matrix) {
let n = matrix.length;
// 先沿对角线镜像对称二维矩阵
for (let i = 0; i < n; i++) {
for (let j = i; j < n; j++) {
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
}
}
const reverseRow = (arr) => {
let i = 0,
j = arr.length - 1;
while (i <= j) {
[arr[i], arr[j]] = [arr[j], arr[i]];
i++;
j--;
}
};
// 然后反转二维矩阵的每一行
for (let row of matrix) {
reverseRow(row);
}
return matrix;
};
  • 时间复杂度跟解法1一样,但是却不需要额外的空间复杂度

三、总结

到此这篇关于JavaScript数组操作之旋转二维数组的文章就介绍到这了,更多相关JS旋转二维数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript使用URL.canParse验证URL的方法详解

    JavaScript使用URL.canParse验证URL的方法详解

    JavaScript诞生以来,一直没有一种简单的方法验证URL,现在JavaScript新增了一个新方法——URL.canParse,文中通过代码示例和图文介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • JavaScript 闭包深入理解(closure)

    JavaScript 闭包深入理解(closure)

    最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。
    2009-05-05
  • js实现简单的选项卡效果

    js实现简单的选项卡效果

    本文主要介绍了js实现简单的选项卡效果的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 详解微信小程序网络请求接口封装实例

    详解微信小程序网络请求接口封装实例

    这篇文章主要介绍了微信小程序网络请求接口封装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 基于jQuery的模仿新浪微博时间的组件

    基于jQuery的模仿新浪微博时间的组件

    废话不多说,实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数.
    2011-10-10
  • js 下拉菜单点击旁边收起实现(踩坑记)

    js 下拉菜单点击旁边收起实现(踩坑记)

    这篇文章主要介绍了js 下拉菜单点击旁边收起实现(踩坑记),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • BootStrap selectpicker后台动态绑定数据的方法

    BootStrap selectpicker后台动态绑定数据的方法

    这篇文章主要为大家详细介绍了BootStrap selectpicker后台动态绑定数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 预防网页挂马的方法总结

    预防网页挂马的方法总结

    这篇文章主要介绍了预防网页挂马的方法总结的相关资料,这里详细整理了具体方法,和如何实现,需要的朋友可以参考下
    2016-11-11
  • javascript 仿QQ滑动菜单效果代码

    javascript 仿QQ滑动菜单效果代码

    javascript 仿QQ滑动菜单效果代码,非常漂亮的代码,学习js的朋友可以参考下代码风格。
    2010-09-09
  • 购物车选中得到价格实现示例

    购物车选中得到价格实现示例

    本文为大家介绍下购物车如何实现选中得到价格,下面有个不错的示例,大家可以参考下
    2014-01-01

最新评论