Daily Archives: April 5, 2016

Nested List Weight Sum

Given a nested list of integers, return the sum of all integers in the list weighted by their depth.

Each element is either an integer, or a list — whose elements may also be integers or other lists.

Example 1:
Given the list [[1,1],2,[1,1]], return 10. (four 1’s at depth 2, one 2 at depth 1)

Example 2:
Given the list [1,[4,[6]]], return 27. (one 1 at depth 1, one 4 at depth 2, and one 6 at depth 3; 1 + 42 + 63 = 27)

Solution. This can be easily solved by recursion. For each list, if is a number, add to ans[]. If not, call recursion on it.

Java solution:

public int weightedSum(List list) {
    return weightedSumHelper(list, 1);
}

public int weightedSumHelper(List<Object> list, int depth) {
    int ans = 0;
    for (Object l : list) {
        if (l instanceof List) {
            ans += weightedSumHelper((List)l, depth + 1);
        }
        else {
            int num = (Integer)l;
            ans += depth * num;
        }
    }
    return ans;
}

Python solution:

def weightedSum(self, list):
    ans = [0]
    self.weightedSumHelper(l, 1, ans)
    return ans[0]

def weightedSumHelper(self, l, depth, ans):
    for ele in l:
        if isinstance(ele, list):
            self.weightedSumHelper(ele, depth + 1, ans)
        else:
            ans[0] += ele * depth