Leetcode 339. Nested List Weight Sum
Given a nested list of integers and sublists, compute the total sum where each integer is multiplied by its depth in the nesting. The challenge is to traverse the arbitrarily nested structure and accumulate value*depth for each integer (track depth via recursion or an explicit stack/queue).
DESCRIPTION
Given a nested list of integers and sublists, compute the total sum where each integer is multiplied by its depth in the nesting. The challenge is to traverse the arbitrarily nested structure and accumulate value*depth for each integer (track depth via recursion or an explicit stack/queue).
Input:
nestedList = [1,[4,[6]]]
Output:
27
Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3: 11 + 42 + 6*3 = 27
Constraints:
- 1 <= nestedList.length <= 50
- The values of the integers in the nested list is in the range [-100, 100]
- The maximum depth of any integer is less than or equal to 50
Understanding the Problem
Let's understand what we're being asked to do. We have a nested list like [1,[4,[6]]] where integers can appear at different depths of nesting.
Tracing through: the integer 1 is at depth 1 (outermost level), the integer 4 is at depth 2 (nested once), and the integer 6 is at depth 3 (nested twice). We need to compute 1*1 + 4*2 + 6*3 = 1 + 8 + 18 = 27.
Important constraint: The nesting can be arbitrarily deep - we might have [1,[2,[3,[4,[5]]]]] with many levels.
Edge cases to consider: What if the list is empty? What if there are only integers at depth 1 (no nesting)? What if a sublist is empty like [1,[],2]?
Building Intuition
Each time we encounter a sublist, we're going one level deeper in the nesting structure. When we process an integer, we need to know how deep we currently are.
This creates a natural pattern: as we explore deeper into nested lists, we increment depth; as we finish processing a sublist and return, we decrement depth.
The depth information must be carried through our traversal. We can't just iterate through elements linearly - we need to track our current nesting level as we explore.
This depth-tracking pattern is fundamental to processing hierarchical or tree-like structures where position in the hierarchy matters.
Think of exploring a file system with nested folders:
- Root folder is depth 1
- Files in root are at depth 1
- Subfolder takes you to depth 2
- Files in subfolder are at depth 2
- When you exit a subfolder, you return to the previous depth
The nested list works the same way - each sublist is like entering a folder, and we need to remember how deep we've gone to calculate the weighted sum correctly.
Common Mistakes
Forgetting to pass depth+1 when recursing into sublists, causing all elements to be weighted by the same depth
Not handling empty sublists correctly - an empty sublist [] should not contribute to the sum but should still be traversed
Trying to flatten the list first and then calculate depth - this loses the depth information that's inherent in the nested structure
Using breadth-first search (BFS) when DFS is more natural - BFS requires tracking depth explicitly for each element in the queue
Not considering that a nested list element can be either an integer OR another list - the type checking is crucial for correct traversal
Optimal Solution
Use depth-first search (DFS) with recursion to traverse the nested structure. Start at depth 1 and recursively process each element. If the element is an integer, multiply it by the current depth and add to the sum. If it's a sublist, recursively process it at depth+1. The recursive nature naturally tracks depth as we go deeper into nested lists and returns to previous depths when sublists are fully processed.
Test Your Knowledge
Login to take the complexity quiz and track your progress
Complexity Analysis
Time Complexity: O(n) We visit each integer exactly once, where n is the total number of integers across all nesting levels
Space Complexity: O(d) The recursion stack depth is proportional to the maximum nesting depth d. In the worst case of deeply nested lists, this could be O(n), but typically d << n
What We've Learned
- Recursive depth tracking: When dealing with nested structures, pass depth as a parameter through recursive calls (depth + 1 for each level) - this elegantly captures the nesting level without needing external state management or complex bookkeeping.
- Interface-based polymorphism: The NestedInteger interface abstracts away whether an element is an integer or a list - always check `isInteger()` first before calling `getInteger()` or `getList()` to avoid runtime errors and handle both cases correctly.
- DFS for nested traversal: Depth-First Search (recursion or stack) is the natural choice for nested list problems because it processes each branch completely before backtracking, making depth calculation straightforward compared to BFS which would require storing depth metadata with each element.
- Alternative BFS approach: You can solve this with a queue by storing (element, depth) pairs explicitly - this trades the implicit call stack for an explicit data structure, useful when recursion depth limits are a concern or when you need level-by-level processing.
- Accumulator pattern: Maintain a running sum that accumulates `value * depth` for each integer encountered - this single-pass approach is more efficient than storing all values and computing afterward, reducing both time and space complexity.
- Nested structure generalization: This depth-weighted traversal pattern applies broadly to tree/graph problems (file system size calculation, organizational hierarchy costs, XML/JSON parsing with depth penalties) - whenever depth or level affects the computation, consider passing it as a parameter through your traversal.
Related Concepts and Problems to Practice
This problem involves parsing nested structures (brackets within brackets) similar to how nested lists work. Both require tracking depth/nesting levels and processing inner elements before outer ones, making it excellent practice for understanding nested structure traversal.
Like the nested list weight sum, this problem requires DFS traversal while maintaining state (current path/sum) and depth information. Both problems accumulate values during recursive traversal and require understanding how to pass and update state through nested structures.
This is a foundational problem for understanding depth tracking in recursive traversal, which is the core concept needed for nested list weight sum. It teaches how to track and return depth information during DFS, a simpler version of the depth-weighted calculation pattern.
Test Your Understanding
Why is nested-list the right data structure for this problem?
Select an answer to see the explanation
Question Timeline
See when this question was last asked and where, including any notes left by other candidates.
Late May, 2026
Late April, 2026
Mid February, 2026
Hello Interview Premium
Your account is free and you can post anonymously if you choose.