LeetCode - 2625.扁平化嵌套数组

学习 · 2023-10-17 · 33 人浏览

喜闻乐见的扁平化数组,在不适用flat 方法来解决这个问题

  输入
  arr = [[1, 2, 3], [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]]
  n = 2
  输出
  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

要求

  1. 入参可能是任意维度的数组,根据扁平深度来处理

递归题解

var flat = function (arr, n) {
  let resAry = [];
  let len = arr.length;

  for (let i = 0; i < len; i++) {
    // 如果是数组成员 并且扁平深度还不为0 则递归 并减少遍历深度
    if (Array.isArray(arr[i]) && n > 0) {
      resAry.push(...flat(arr[i], n - 1)); //递归返回的成员包装了一层数组 需要默认展开一层
    } else {
      resAry.push(arr[i]);
    }
  }
  return resAry;
};

循环题解

var flat2 = function(arr,n){
  while(n > 0 && arr.some(Array.isArray)){
    arr = [].concat(...arr) //通过concat的特性扁平一层数组
    n--
  }
  return arr
}
扁平化
Theme Jasmine by Kent Liao