364 Nested List Weight Sum II
364. Nested List Weight Sum II
1. Question
2. Implementation
/**
* // This is the interface that allows for creating nested lists.
* // You should not implement it, or speculate about its implementation
* public interface NestedInteger {
* // Constructor initializes an empty nested list.
* public NestedInteger();
*
* // Constructor initializes a single integer.
* public NestedInteger(int value);
*
* // @return true if this NestedInteger holds a single integer, rather than a nested list.
* public boolean isInteger();
*
* // @return the single integer that this NestedInteger holds, if it holds a single integer
* // Return null if this NestedInteger holds a nested list
* public Integer getInteger();
*
* // Set this NestedInteger to hold a single integer.
* public void setInteger(int value);
*
* // Set this NestedInteger to hold a nested list and adds a nested integer to it.
* public void add(NestedInteger ni);
*
* // @return the nested list that this NestedInteger holds, if it holds a nested list
* // Return null if this NestedInteger holds a single integer
* public List<NestedInteger> getList();
* }
*/
class Solution {
public int depthSumInverse(List<NestedInteger> nestedList) {
int[] maxDepth = new int[1];
Map<Integer, Integer> map = new HashMap<>();
dfs(nestedList, 1, map, maxDepth);
int sum = 0;
for (int i = 1; i <= maxDepth[0]; i++) {
if (map.containsKey(i)) {
sum += map.get(i) * (maxDepth[0] - i + 1);
}
}
return sum;
}
public void dfs(List<NestedInteger> nestedList, int depth, Map<Integer, Integer> map, int[] maxDepth) {
if (nestedList.isEmpty()) {
return;
}
maxDepth[0] = Math.max(maxDepth[0], depth);
for (NestedInteger ni : nestedList) {
if (ni.isInteger()) {
if (!map.containsKey(depth)) {
map.put(depth, ni.getInteger());
}
else {
map.put(depth, map.get(depth) + ni.getInteger());
}
}
else {
dfs(ni.getList(), depth + 1, map, maxDepth);
}
}
}
}3. Time & Space Complexity
Last updated