{x}
blog image

Nested List Weight Sum

Solution Explanation

This problem asks to calculate the weighted sum of integers within a nested list, where the weight is determined by the depth of the integer within the nested structure. The solution uses Depth-First Search (DFS) to recursively traverse the nested list.

Approach

The core idea is to use a recursive helper function (dfs in the code examples) that takes the nested list and the current depth as input. The function iterates through each element:

  1. Integer: If an element is an integer, its value is multiplied by the current depth and added to the running sum.
  2. Nested List: If an element is a nested list, the dfs function is called recursively on that nested list with an incremented depth. The result of the recursive call (the weighted sum of the nested list) is added to the running sum.

The main function simply calls the dfs function with the input nested list and an initial depth of 1.

Code Explanation (Python)

The Python solution is concise and clearly demonstrates the recursive approach:

class Solution:
    def depthSum(self, nestedList: List[NestedInteger]) -> int:
        def dfs(nestedList, depth):
            depth_sum = 0
            for item in nestedList:
                if item.isInteger():
                    depth_sum += item.getInteger() * depth
                else:
                    depth_sum += dfs(item.getList(), depth + 1)
            return depth_sum
 
        return dfs(nestedList, 1)

The dfs function handles the recursive traversal. The base case is when item.isInteger() is true, meaning an integer is encountered. Otherwise, the recursive call explores the nested list.

Time and Space Complexity Analysis

  • Time Complexity: O(N), where N is the total number of integers in the nested list. Each integer is visited and processed exactly once. The recursive calls create a call stack proportional to the maximum depth of the nested list, but this is still linear with respect to N in the worst-case scenario (a very deep, narrow structure).

  • Space Complexity: O(D), where D is the maximum depth of nesting in the list. This space is used by the call stack during the recursive calls. In the worst-case, D could be proportional to N (a very deep, narrow structure), but generally, D is much smaller than N. In the best case (a single level list), D is constant (1).

The Java and JavaScript solutions follow the same logic and have the same time and space complexities. The provided code snippets are functionally equivalent across the languages, only differing in syntax.