美文网首页
LeetCode题解:2625. 扁平化嵌套数组,递归

LeetCode题解:2625. 扁平化嵌套数组,递归

作者: Lee_Chen | 来源:发表于2023-08-15 15:36 被阅读0次

原题链接

https://leetcode.cn/problems/flatten-deeply-nested-array/

题目解析

题目要求我们将一个多维数组扁平化到指定的深度。具体来说,我们需要将数组中的子数组扁平化,直到达到给定的深度n。如果子数组的深度大于n,则不进行扁平化。

解题思路

我们可以使用递归的方法来解决这个问题。具体步骤如下:

  1. 遍历数组的每一个元素。
  2. 如果元素是一个数组,并且当前的深度小于n,则递归地扁平化这个子数组。
  3. 如果元素是一个数组,但当前的深度等于n,则直接将这个子数组添加到结果数组中。
  4. 如果元素不是一个数组,直接将它添加到结果数组中。

代码实现

/**
 * 扁平化多维数组到指定深度
 * @param {any[]} arr - 待扁平化的多维数组
 * @param {number} n - 扁平化的深度
 * @return {any[]} - 扁平化后的数组
 */
var flat = function(arr, n) {
    let result = [];  // 存储扁平化后的结果

    /**
     * 递归函数,用于扁平化数组
     * @param {any[]} currentArr - 当前待处理的数组
     * @param {number} level - 当前数组的深度
     * @param {any[]} output - 存储扁平化结果的数组
     */
    function recursion(currentArr, level, output) {
        for (const item of currentArr) {
            // 判断当前元素是否为数组
            if (Array.isArray(item)) {
                // 如果当前深度小于n,则继续扁平化
                if (level < n) {
                    recursion(item, level + 1, output);
                } else {
                    // 否则,直接将子数组添加到结果中
                    output.push(item);
                }
            } else {
                // 如果元素不是数组,直接添加到结果中
                output.push(item);
            }
        }
    }
    
    // 调用递归函数开始扁平化
    recursion(arr, 0, result);
    return result;
};

总结

这种递归方法的时间复杂度是O(n),其中n是数组中的元素数量。空间复杂度取决于递归的深度,但在最坏的情况下,它是O(n)。这种方法是纯净的,没有副作用,并且可以有效地扁平化数组到指定的深度。

相关文章

  • js数组扁平化

    扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 递归 e...

  • 『JavaScript专题』之数组扁平化

    JavaScript专题之数组扁平化 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何...

  • FCC-Steamroller

    对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。 需要递归,如果当初处理的值是数组则重复调用当前函数,直到...

  • js实现数组扁平化

    js实现数组扁平化 数组的扁平化,就是将一个嵌套多层的数组array(嵌套可以是任何层数)转换为只有一层的额数组。...

  • Js递归数组展平

    遇到多个嵌套的数组,将嵌套的数组中的元素全部展开到最外层的数组中,可以使用递归来解决这个问题。 什么是递归? 递归...

  • 每日一题

    20170830 数组扁平化: 实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是...

  • LeetCode 341-380

    341. 扁平化嵌套列表迭代器[https://leetcode-cn.com/problems/flatten-...

  • js经典算法记录

    随机数组洗牌 简单的日期字符串排序 递归实现数组扁平化 极简版数组扁平化 记录数组项重复次数 冒泡排序 快速排序(...

  • Javascript数组扁平化

    数组的扁平化是指将多维数组转换成一位数组。 递归方法 用数组的reduce方法来简化递归操作 用数组的toStri...

  • 用JavaScript实现的5个常见函数

    数组扁平化 数组扁平化有很多方法,但最终最好的方法就是递归,实现一个指定深度的扁平化方法,这样基本的套路都会了解。...

网友评论

      本文标题:LeetCode题解:2625. 扁平化嵌套数组,递归

      本文链接:https://www.haomeiwen.com/subject/zwphmdtx.html