LeetCode 题解工作台

嵌套数组生成器

现给定一个整数的 多维数组 ,请你返回一个生成器对象,按照 中序遍历 的顺序逐个生成整数。 多维数组 是一个递归数据结构,包含整数和其他 多维数组 。 中序遍历 是从左到右遍历每个数组,在遇到任何整数时生成它,遇到任何数组时递归应用 中序遍历 。 示例 1: 输入: arr = [[[6]],[1,…

category

0

题型

code_blocks

1

代码语言

hub

0

相关题

当前训练重点

中等 · nested·数组·generator·core·interview·pattern

bolt

答案摘要

type MultidimensionalArray = (MultidimensionalArray | number)[]; function* inorderTraversal(arr: MultidimensionalArray): Generator<number, void, unknown> {

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 nested·数组·generator·core·interview·pattern 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

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

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

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

 

示例 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 <= 105
  • 0 <= arr.flat()[i] <= 105
  • maxNestingDepth <= 105
lightbulb

解题思路

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type MultidimensionalArray = (MultidimensionalArray | number)[];

function* inorderTraversal(arr: MultidimensionalArray): Generator<number, void, unknown> {
    for (const e of arr) {
        if (Array.isArray(e)) {
            yield* inorderTraversal(e);
        } else {
            yield e;
        }
    }
}

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

复杂度分析

指标
时间Depends on the final approach
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Understand recursion with generator functions.

  • question_mark

    Familiarity with 'yield*' syntax for delegating generator control.

  • question_mark

    Ability to optimize traversal of nested arrays.

warning

常见陷阱

外企场景
  • error

    Failing to correctly implement the recursion for nested arrays.

  • error

    Not using the 'yield*' syntax to properly delegate control between nested generators.

  • error

    Forgetting to handle edge cases like empty arrays.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Implement a version that flattens the array into a single list before traversing.

  • arrow_right_alt

    Optimize for large arrays with a higher nesting depth.

  • arrow_right_alt

    Test how the solution performs with arrays containing only integers versus arrays with mixed data types.

help

常见问题

外企场景

嵌套数组生成器题解:nested·数组·generator·cor… | LeetCode #2649 中等