Share the joy
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