Se me ocurrió una solución con complejidad de tiempo O (n), siendo n el número total de números en la matriz de entrada.
La solución es como:
- Mantenga una variable de suma e inicialícela con 0.
- Itere sobre cada elemento de la matriz y verifique si el elemento es un número o una matriz.
- Si el elemento es un número, agréguelo a la suma, de lo contrario, si es una matriz, sume esa matriz y agréguela a la suma.
// Función principal
función main () {
var inputArray = [1,2, [3,4, [5, [6], 7], 8], 9,10]; // Entrada
console.log (nestedArraySum (inputArray));
}
- ¿Qué es la matriz? Por favor explique los detalles.
- Cómo construir un secuenciador de ADN
- ¿Cuál es la complejidad temporal de eliminar el borde de la estructura de la lista de adyacencia en un gráfico?
- ¿Cuál es la diferencia entre quicksort y mergesort?
- ¿Para qué se usan realmente los algoritmos?
// función nestedArraySum para realizar la suma
función nestedArraySum (arr) {
var sum = 0;
para (var i = 0; i <longitud de arr; i ++) {
if (typeof arr [i] === “número”) {// si el elemento es un número, agréguelo a la suma
suma + = arr [i];
}
sino if (Object.prototype.toString.call (arr [i]) === ‘[object Array]’) {// sino si es una matriz, llame de forma recursiva a la función nestedArraySum ()
sum + = nestedArraySum (arr [i]);
}
}
suma de retorno;
}
principal();
Cada elemento se visitará una vez, por lo tanto, la complejidad del tiempo es O (n).
Se editará si encuentro una mejor solución.