码迷,mamicode.com
首页 > 编程语言 > 详细

数组扁平化(迭代、递归)

时间:2020-04-29 10:46:47      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:sar   一个   iter   isa   结构   元素   font   --   turn   

测试用例  [[1, [2, [3, [11, 12, [13]], [14], [[15]], 4, 5, 6]], 5, 7],9,[1, 2],[[4, 5, [6]]]]

 

1.迭代

迭代方法会考虑到数组输出顺序。为了保证结果数组与原数组中的元素顺序一致,会用到一个栈结构。每次循环判断栈顶元素是否是数组,如果是数组就弹出,然后循环该数组逆序入栈。再进行循环,直到栈顶元素不是数组,结束当前循环,弹出栈顶元素,放入结果数组中。

 

function flat_iteration(arr) {
  const ans = []
  const stack = [arr]
  while (stack.length) {
    while (Array.isArray(stack[stack.length - 1])) {
      const temp = stack.pop()
      for (let i = temp.length - 1; i >= 0; i--) stack.push(temp[i])
    }
    if (stack.length) ans.push(stack.pop())
  }
  return ans
}

 

 

2.递归

function flat_recursion(arr) {
  const ans = []
  function dfs(x) {
    if (Array.isArray(x)) {
      for (let i = 0, len = x.length; i < len; i++) dfs(x[i])
    } else {
      ans.push(x)
    }
  }
  dfs(arr)
  return ans
}

 

数组扁平化(迭代、递归)

标签:sar   一个   iter   isa   结构   元素   font   --   turn   

原文地址:https://www.cnblogs.com/tengyijun/p/12800311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!