这题实在是简单的已经没法再解释啥了。最基本的图论题。想用bfs也行,用dfs也行, 只要在遍历的过程里记得自己是哪一层的即可。搞定,下面就给出dfs的代码:
class Solution {
public int depthSum(List<NestedInteger> nestedList) {
return depthSum(nestedList, 1);
}
public int depthSum(List<NestedInteger> nestedList, int depth) {
int result = 0;
for (NestedInteger ni : nestedList) {
result += ni.isInteger() ? ni.getInteger() * depth : depthSum(ni.getList(), depth + 1);
}
return result;
}
}
算了,活动了一下筋脉,再附送一个bfs的做法好了
public int depthSum(List<NestedInteger> nestedList) {
Queue<NestedInteger> nextLayer = new LinkedList<>();
Queue<NestedInteger> curLayer = new LinkedList<>();
for (NestedInteger nInt : nestedList) {
nextLayer.add(nInt);
}
int layer = 0;
int result = 0;
while(!nextLayer.isEmpty() || !curLayer.isEmpty()) {
if (curLayer.isEmpty()) {
Queue<NestedInteger> tmpLayer = curLayer;
curLayer = nextLayer;
nextLayer = tmpLayer;
layer++;
}
NestedInteger nInt = curLayer.poll();
if (nInt.isInteger()) {
result += nInt.getInteger() * layer;
} else {
for (NestedInteger nextLayerElem : nInt.getList()) {
nextLayer.add(nextLayerElem);
}
}
}
return result;
}