|
27 | 27 | * } |
28 | 28 | */ |
29 | 29 | class Solution { |
30 | | - int maxDepth; |
31 | | - int sum; |
32 | | - public int depthSumInverse(List<NestedInteger> nestedList) { |
33 | | - maxDepth = 0; |
34 | | - maxDepthHelper(nestedList, 1); |
35 | | - |
36 | | - sum = 0; |
37 | | - helper(nestedList, maxDepth); |
38 | | - |
39 | | - return sum; |
| 30 | + public int depthSumInverse(List<NestedInteger> nestedList) { |
| 31 | + Queue<NestedInteger> queue = new LinkedList<>(); |
| 32 | + int prevSum = 0; |
| 33 | + int currSum = 0; |
| 34 | + for (NestedInteger nestedInteger : nestedList) { |
| 35 | + queue.add(nestedInteger); |
40 | 36 | } |
41 | | - |
42 | | - private void helper(List<NestedInteger> nestedList, int level) { |
43 | | - for (NestedInteger nested : nestedList) { |
44 | | - if (nested.isInteger()) { |
45 | | - sum += nested.getInteger() * level; |
46 | | - } |
47 | | - else { |
48 | | - helper(nested.getList(), level - 1); |
49 | | - } |
| 37 | + while (!queue.isEmpty()) { |
| 38 | + int size = queue.size(); |
| 39 | + int levelSum = 0; |
| 40 | + while (size-- > 0) { |
| 41 | + NestedInteger removed = queue.remove(); |
| 42 | + if (removed.isInteger()) { |
| 43 | + levelSum += removed.getInteger(); |
50 | 44 | } |
51 | | - } |
52 | | - |
53 | | - private void maxDepthHelper(List<NestedInteger> nestedList, int currLevel) { |
54 | | - maxDepth = Math.max(maxDepth, currLevel); |
55 | | - |
56 | | - for (NestedInteger nestedInteger : nestedList) { |
57 | | - if (!nestedInteger.isInteger()) { |
58 | | - maxDepthHelper(nestedInteger.getList(), currLevel + 1); |
59 | | - } |
| 45 | + else { |
| 46 | + List<NestedInteger> nList = removed.getList(); |
| 47 | + for (NestedInteger nInteger : nList) { |
| 48 | + queue.add(nInteger); |
| 49 | + } |
60 | 50 | } |
| 51 | + } |
| 52 | + prevSum += levelSum; |
| 53 | + currSum += prevSum; |
61 | 54 | } |
| 55 | + return currSum; |
| 56 | + } |
62 | 57 | } |
0 commit comments