天天看點

阿裡前端面試題之擷取嵌套數組的深度

題目描述

擷取嵌套數組的深度,給定一個帶嵌套的數組,實作一個方法可擷取嵌套數組的最大深度,數組無嵌套子數組則傳回0,有一層嵌套子數組則傳回1,以此類推。

示例:

  • getArrayDeep([1,2,[3,[1,[0]]]]); 傳回3
  • getArrayDeep([]); 傳回0
  • getArrayDeep([[[[]]]]) 傳回3
  • getArrayDeep([0,[2],[2,[3]]]); 傳回2

解題思路

使用遞歸的思想進行周遊,同時使用flag辨別符來标記目标元素是否是數組,如果是數組,存儲到臨時數組中,然後投入遞歸,所有的遞歸結束後,判斷flag是true還是false,如果是true,則傳回臨時數組中的最大值,如果是false則傳回1。
function recursiveMax(input) {
  var flag = false;
  var num = [];
  for (var i = 0; i < input.length; i++) {
    if (input[i] instanceof Array) {
      flag = true;
      num.push(recursiveMax(input[i]));
    }
  }
  if (flag) {
    return Math.max.apply(null, num) + 1;
  } else {
    return 1
  }
}
var res = recursiveMax([0,[2],[2,[3]]]) - 1;
var res = recursiveMax([1,2,[3,[1,[0]]]]) - 1;
console.log(res) // 4
複制代碼      

題目反思

  • 這道題目是遞歸的經典用法,必須熟練掌握。
  • 使用辨別符對元素進行标記,來輔助遞歸是解決遞歸問題的關鍵思路。
  • 使用Math.max.apply(num),可以求出一個數組中的最大值。

繼續閱讀