輸入為一個不為空的陣列,元素為整數或陣列,內層的陣列中也可能包含整數或陣列...以此類推。回傳陣列的 '商品總和',每一個陣列的商品總和代表元素和 * 陣列層數,
舉例來說,
[ ] 層數為 1,[x, y] 的產品總和為 x + y,
[ [ ] ] 內層陣列層數為 2,[x, [y, z]] 的產品總和為 x + 2(y + z),
[ [ [ ] ] ] 最內層陣列層數為 3,[x, [y, [z]]] 的產品總和為 x + 2(y + 3z)。
sample input:
array = [5, 2, [7, -1], 3, [6, [-13, 8],4]]
sample output:
12
基本的想法是,計算陣列元素總合的過程中,可以以遞迴的方式對內層的陣列進行同樣的計算。具體的步驟為:
time: O(N) N 代表輸入陣列及子陣列中的所有元素數量,以上方範例輸入來說為 12。
space: O(h) h 代表陣列的最高層數,因為每增加一層就會呼叫一次遞迴式,所以也等於遞迴的堆疊數。
function productSum(array, h = 1) {
let sum = 0;
for (const element of array) {
if (Array.isArray(element)) {
sum += productSum(element, h + 1);
}
else {
sum += element;
}
}
return sum * h;
}