leetCode2649. 嵌套数组生成器js/ts专属题(详解)

题目描述:

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

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

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

 

 题目分析:

       根据题目描述,我们需要中序遍历传入的参数arr数组,arr是一个嵌套的多维数组,在遍历到数组时需要再进行递归的遍历,只在遇到整数的时候生成它。一个很简单的思路就是先将这个多维数组arr打平,变成包含所有非数组类型元素的一维数组,然后再进行遍历yield每个元素。

源代码:

/**
 * @param {Array} arr
 * @return {Generator}
 */
function *inorderTraversal(array) {
  const arrayFlatten = (arr, ans = new Array()) => {
      for(const item of arr) {
          if(Array.isArray(item)) {
             arrayFlatten(item, ans);
          } else {
             ans.push(item);
          }
      }

    return ans;
  }

   for(const item of arrayFlatten(array)) {
       yield item;
   }
};

/**
 * const gen = inorderTraversal([1, [2, 3]]);
 * gen.next().value; // 1
 * gen.next().value; // 2
 * gen.next().value; // 3
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值