Open chencl1986 opened 1 year ago
https://leetcode.cn/problems/flatten-deeply-nested-array/
题目要求我们将一个多维数组扁平化到指定的深度。具体来说,我们需要将数组中的子数组扁平化,直到达到给定的深度n。如果子数组的深度大于n,则不进行扁平化。
n
我们可以使用递归的方法来解决这个问题。具体步骤如下:
/** * 扁平化多维数组到指定深度 * @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)。这种方法是纯净的,没有副作用,并且可以有效地扁平化数组到指定的深度。
O(n)
原题链接
https://leetcode.cn/problems/flatten-deeply-nested-array/
题目解析
题目要求我们将一个多维数组扁平化到指定的深度。具体来说,我们需要将数组中的子数组扁平化,直到达到给定的深度
n
。如果子数组的深度大于n
,则不进行扁平化。解题思路
我们可以使用递归的方法来解决这个问题。具体步骤如下:
n
,则递归地扁平化这个子数组。n
,则直接将这个子数组添加到结果数组中。代码实现
总结
这种递归方法的时间复杂度是
O(n)
,其中n
是数组中的元素数量。空间复杂度取决于递归的深度,但在最坏的情况下,它是O(n)
。这种方法是纯净的,没有副作用,并且可以有效地扁平化数组到指定的深度。