1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int depthSum(List<NestedInteger> nestedList) {
int ans = 0;
for (NestedInteger e : nestedList) {
ans += helper(e, 1);
}
return ans;
}

private int helper(NestedInteger nested, int depth) {
int ans = 0;
if (nested.isInteger()) {
ans += nested.getInteger() * depth;
} else {
List<NestedInteger> list = nested.getList();
for (NestedInteger e : list) {
ans += helper(e, depth + 1);
}
}
return ans;
}
}

DFS去做. 递归函数的功能就是给一个NestedInteger以及它的depth, 它能告诉我们这个NestedInteger展开是多少. 比如[[1, 2, 3], 3] 里面的[1, 2, 3]的depth是2, 外面的3depth是1, 我们为了求外面的list的值, 就需要知道里面list的值以及3的值. 因此自然而然联想到了用递归函数来解决.

时间复杂度: O(n) n是数字的个数.
空间复杂度: O(H) h是深度.