题目描述
获取嵌套数组的深度,给定一个带嵌套的数组,实现一个方法可获取嵌套数组的最大深度,数组无嵌套子数组则返回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),可以求出一个数组中的最大值。