2649. 嵌套数组生成器

简介: 2649. 嵌套数组生成器

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

现给定一个整数的 多维数组 ,请你返回一个生成器对象,按照 中序遍历 的顺序逐个生成整数。

多维数组 是一个递归数据结构,包含整数和其他 多维数组。

中序遍历 是从左到右遍历每个数组,在遇到任何整数时生成它,遇到任何数组时递归应用 中序遍历 。

示例 1:

输入:arr = [[[6]],[1,3],[]]
输出:[6,1,3]
解释:
const generator = inorderTraversal(arr);
generator.next().value; // 6
generator.next().value; // 1
generator.next().value; // 3
generator.next().done; // true

示例 2:

输入:arr = []
输出:[]
解释:输入的多维数组没有任何参数,所以生成器不需要生成任何值。

提示:

  • 0 <= arr.flat().length <= 10^5
  • 0 <= arr.flat()[i] <= 10^5
  • maxNestingDepth <= 10^5

解题思路

先使用 Array.prototype.flat() 方法将嵌套的数组扁平化成一维数组。然后,使用 for…of 循环遍历扁平化后的数组中的每个元素,并通过 yield 关键字将其返回给生成器。

由于函数返回的是一个生成器对象,而不是一个普通的数组,因此在需要使用生成器的场合,可以使用 inorderTraversal 函数来生成一个迭代器,通过调用 next() 方法逐个获取生成器返回的值。

需要注意的是,由于该函数没有对原始数组进行任何修改,因此即使输入的数组是多重嵌套的,最终返回的序列也将是一维的,即所有值都是相邻的,没有层级关系。如果需要按照树形结构遍历多维数组,需要使用递归算法或其他层级遍历算法。

AC代码

/**
 * @param {Array} arr
 * @return {Generator}
 */
var inorderTraversal = function*(arr) {
    arr = arr.flat();
    for(const item of arr){
        yield item;
    }
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
消息中间件 负载均衡 Java
Kafka与SpringBoot的整合使用
Kafka与SpringBoot的整合使用
392 0
【鸿蒙4.0】ArkUI组件-Image
【鸿蒙4.0】ArkUI组件-Image应用及需要注意的问题
1120 3
|
安全 虚拟化
GIC规格学习(一)
GIC规格学习(一)
554 0
|
10月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
475 10
|
存储 安全 物联网
计算机网络的类型
本文介绍了网络的分类,涵盖按覆盖范围(PAN、LAN、MAN、WAN)、使用场景(公网、外网、内网)、传输介质(有线、无线)、特殊类型(VLAN、SAN、网络桥接、接入网)及拓扑结构(总线型、星型、树型、环型、网状型)和交换方式(电路交换、报文交换、分组交换)等,详细阐述了各类网络的特点和技术。
1095 2
|
JSON JavaScript Java
如何手写实现 JSON Parser
【11月更文挑战第10天】本文介绍了如何使用 Python 手写实现一个简单的 JSON 解析器。通过逐字符读取 JSON 字符串,解析出对象、数组、字符串、数字、布尔值和 null 等基本数据结构。文章详细描述了每个步骤的具体实现方法,包括去除空白字符、解析基础数据类型、解析字符串、数组和对象,以及核心的 `parse_value` 函数。最后,提供了一个完整的 JSON 解析器主函数示例。
286 2
|
小程序
在微信小程序中打开的页面不能超过10个,达到10个页面后,就不能再打开新的页面
在微信小程序中打开的页面不能超过10个,达到10个页面后,就不能再打开新的页面
983 1
|
Python
Jetson环境安装(二):ubuntu18.0卸载和安装python3
在Jetson Nano上如何卸载Python 3.7并重新安装Python 3.7.0版本的详细步骤,包括卸载命令、安装依赖库、下载和编译Python源码以及建立软链接等。
446 2
|
安全 网络协议 关系型数据库
|
JavaScript 前端开发 开发者
JavaScript基础入门之浏览器控制台调试输出
本文章是对小白学习js的初级教程,也是我对自己学习经验的一种总结,文章大多采用使用案例加讲解,带动学习的方式.因为我们的天性总是喜欢有及时反馈的事物,但是学习是一个慢长的事情,而有结果的回应,才会更好的促进自己去学习,主要是对于javascript学习中的输出,有个大体上的了解,同时通过教学能够更好的使用浏览器来方便我们去学习和运行代码,也是对自己进行笔记整理,对抓住信息关键点的一种提高.