跳到主要内容

2649.嵌套数组生成器

链接:2649.嵌套数组生成器
难度:Medium
标签:
简介:现给定一个整数的 多维数组 ,请你返回一个生成器对象,按照 中序遍历 的顺序逐个生成整数。

题解 1 - typescript

  • 编辑时间:2023-04-24
  • 执行用时:144ms
  • 内存消耗:60.8MB
  • 编程语言:typescript
  • 解法介绍:双状态循环,一直找当前栈顶是number才退出。
type MultidimensionalArray = (MultidimensionalArray | number)[]
function* inorderTraversal(arr: MultidimensionalArray): Generator<number, void, unknown> {
const stack: [MultidimensionalArray, number][] = [[arr, 0]];
const top = () => stack[stack.length - 1];
while (stack.length) {
// 栈顶不是number就一直循环
while (stack.length && typeof top()[0][top()[1]] !== 'number') {
// 栈顶是数组就一直入栈
while (stack.length && Array.isArray(top()[0][top()[1]])) stack.push([top()[0][top()[1]++] as MultidimensionalArray, 0]);
// 栈顶数组已经耗尽就出栈
while (stack.length && top()[1] >= top()[0].length) stack.pop();
}
if (stack.length) yield top()[0][top()[1]++] as number;
}
};