Skip to content

Instantly share code, notes, and snippets.

@NodoFox
Created January 6, 2017 08:58
Show Gist options
  • Save NodoFox/6fe9514b9af4c78c33bb8d56fac7ece9 to your computer and use it in GitHub Desktop.
Save NodoFox/6fe9514b9af4c78c33bb8d56fac7ece9 to your computer and use it in GitHub Desktop.
Nested List Weight Sum II
/*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.
Different from the previous question where weight is increasing from root to leaf, now the weight is defined from bottom up. i.e., the leaf level integers have weight 1, and the root level integers have the largest weight.
Example 1:
Given the list [[1,1],2,[1,1]], return 8. (four 1's at depth 1, one 2 at depth 2)
Example 2:
Given the list [1,[4,[6]]], return 17. (one 1 at depth 3, one 4 at depth 2, and one 6 at depth 1; 1*3 + 4*2 + 6*1 = 17)
*/
// NI = NestedInteger
public long sum(List<NI> list) {
int result = 0;
Queue<NI> q = new LinkedList<NI>();
for(NI each : list) {
q.add(each);
}
int allElementSum = 0;
while(!q.isEmpty()) {
int size = q.size(); // Level Order Traversal needs to process all elements in that level
for(int i = 0; i < size; i++) {
NI item = q.poll();
if(item.isInteger()) {
allElementSum += item.getInteger();
}else {
for(NI each : item) {
q.add(each);
}
}
}
result = result + allElementSum;
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment