2649. 嵌套数组生成器

发布时间:2024年01月19日

说在前面

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

题目描述

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

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

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

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

文章来源:https://blog.csdn.net/Twinkle_sone/article/details/135702159
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。