Product Sum

Code

Python

def productSum(array, multiplier = 1):
sum = 0
for element in array:
if type(element) is list:
sum += productSum(element, multiplier + 1)
else:
sum += element
return sum * multiplier

JavaScript

function productSum(array, multiplier = 1) {
let sum = 0;
for (const element of array) {
if (Array.isArray(element)) {
sum += productSum(element, multiplier + 1);
} else {
sum += element;
}
}
return sum * multiplier;
}
exports.productSum = productSum;

TypeScript

type SpecialArray = Array<number | SpecialArray>;
export function productSum(array: SpecialArray, multiplier = 1) {
let sum = 0;
for (const element of array) {
if (Array.isArray(element)) {
sum += productSum(element, multiplier + 1);
} else {
sum += element;
}
}
return sum * multiplier;
}

Java

import java.util.*;
class Program {
public static int productSum(List<Object> array) {
return productSumHelper(array, 1);
}
public static int productSumHelper(List<Object> array, int multiplier) {
int sum = 0;
for (Object el : array) {
if (el instanceof ArrayList) {
@SuppressWarnings("unchecked")
ArrayList<Object> ls = (ArrayList<Object>) el;
sum += productSumHelper(ls, multiplier + 1);
} else {
sum += (int) el;
}
}
return sum * multiplier;
}
}

C++

#include <any>
#include <vector>
using namespace std;
int productSum(vector<any> array, int multiplier = 1) {
int sum = 0;
for (auto el : array) {
if (el.type() == typeid(vector<any>)) {
sum += productSum(any_cast<vector<any>>(el), multiplier + 1);
} else {
sum += any_cast<int>(el);
}
}
return sum * multiplier;
}

Space-Time Complexity

TimeSpace
WorseO(n)O(d)

Where n is the total number of elements in the array, including sub-elements, and d is the greatest depth of "special" arrays in the array