Created
January 6, 2017 08:58
-
-
Save NodoFox/6fe9514b9af4c78c33bb8d56fac7ece9 to your computer and use it in GitHub Desktop.
Nested List Weight Sum II
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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