实现一个函数 flatten(arr),将多维数组扁平化为一维数组

推荐答案

本题详细解读

题目分析

题目要求实现一个函数 flatten(arr),将多维数组扁平化为一维数组。例如,输入 [1, [2, [3, 4], 5]],输出应为 [1, 2, 3, 4, 5]

解题思路

  1. 递归处理:由于数组可能嵌套多层,因此需要使用递归来处理每一层的数组。
  2. 数组拼接:使用 concat 方法将当前元素与已处理的部分数组拼接起来。
  3. 判断数组类型:使用 Array.isArray() 方法判断当前元素是否为数组,如果是数组则递归调用 flatten 函数。

代码解析

  • reduce 方法reduce 方法用于遍历数组,并将数组中的每个元素累加到一个初始值(这里是空数组 [])。
  • Array.isArray(val):判断当前元素 val 是否为数组。
  • acc.concat(flatten(val)):如果 val 是数组,则递归调用 flatten 函数,并将结果与 acc 拼接。
  • acc.concat(val):如果 val 不是数组,则直接将 val 拼接到 acc 中。

示例

时间复杂度

  • 该算法的时间复杂度为 O(n),其中 n 是数组中所有元素的总数。因为每个元素都会被访问一次。

空间复杂度

  • 空间复杂度为 O(d),其中 d 是数组的嵌套深度。递归调用栈的深度取决于数组的嵌套层数。
纠错
反馈