不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
现给定一个整数的 多维数组 ,请你返回一个生成器对象,按照 中序遍历 的顺序逐个生成整数。
多维数组 是一个递归数据结构,包含整数和其他 多维数组。
中序遍历 是从左到右遍历每个数组,在遇到任何整数时生成它,遇到任何数组时递归应用 中序遍历 。
示例 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 = []
输出:[]
解释:输入的多维数组没有任何参数,所以生成器不需要生成任何值。
提示:
先使用 Array.prototype.flat() 方法将嵌套的数组扁平化成一维数组。然后,使用 for…of 循环遍历扁平化后的数组中的每个元素,并通过 yield 关键字将其返回给生成器。
由于函数返回的是一个生成器对象,而不是一个普通的数组,因此在需要使用生成器的场合,可以使用 inorderTraversal 函数来生成一个迭代器,通过调用 next() 方法逐个获取生成器返回的值。
需要注意的是,由于该函数没有对原始数组进行任何修改,因此即使输入的数组是多重嵌套的,最终返回的序列也将是一维的,即所有值都是相邻的,没有层级关系。如果需要按照树形结构遍历多维数组,需要使用递归算法或其他层级遍历算法。
/**
* @param {Array} arr
* @return {Generator}
*/
var inorderTraversal = function*(arr) {
arr = arr.flat();
for(const item of arr){
yield item;
}
};
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 ,平时也喜欢写些东西,既为自己记录 ,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 ,写错的地方望指出,定会认真改进 ,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 。