解题思路

步骤

深度优先遍历(利用栈实现)
1. 将数组元素,深度默认为 0 入栈
2. 出栈时计算深度,出栈一次,深度 + 1。出栈元素是数组,依次入栈,继续计算深度;出栈元素不是数组,计算最大深度

注意点:

  1. deep 在深度遍历的过程中被贯穿起来
  2. 某个变量想被贯穿起来的时候,可以一起入栈

图解

将多维数组转换成树结构,深度优先遍历计算最大深度。
计算数组嵌套的最大深度 - 图1

代码

  1. 数组:[1, [2, [7, [4, [5]]], 6], 9]
  2. 最大深度:5
  3. /**
  4. * 解题思路:深度优先遍历(利用栈实现)
  5. * 1. 将数组元素,深度默认为 0 入栈
  6. * 2. 出栈时计算深度,出栈一次,深度 + 1。出栈元素是数组,依次入栈,继续计算深度;出栈元素不是数组,计算最大深度
  7. */
  8. function getArrayDeep(arr) {
  9. let maxDeep = 0;
  10. const stack = [];
  11. // 依次遍历数组元素
  12. for (let i = 0; i < arr.length; i++) {
  13. // 初始值入栈
  14. stack.push([arr[i], 0]);
  15. // 判断栈不为空
  16. while(stack.length > 0) {
  17. // 出栈
  18. let [current, deep] = stack.shift();
  19. // 计算深度,deep 会贯穿嵌套的数组,直到数组元素不是数组类型
  20. deep++;
  21. // 当前元素是数组,将数组元素依次入栈
  22. if (Array.isArray(current)) {
  23. for (let j = 0; j < current.length; j++) {
  24. stack.push([current[j], deep]);
  25. }
  26. } else { // 当前元素不是数组,计算最大深度
  27. maxDeep = Math.max(maxDeep, deep);
  28. }
  29. }
  30. }
  31. return maxDeep;
  32. }
  33. const arr = [1, [2, [7, [4, [5]]], 6], 9];
  34. console.log(getArrayDeep(arr));