【Lintcode】551. Nested List Weight Sum
程序员文章站
2022-05-23 21:46:48
...
题目地址:
https://www.lintcode.com/problem/nested-list-weight-sum/description
有一个NestedInteger的类,它里面要么是一个单独的整数,要么是一个NestedInteger的List。显然一个NestedInteger是个多叉树的结构。假设根的深度是,每次向下走深度就加1。给定一个NestedInteger的List,求所有里面的NestedInteger的所有节点的带权和,权即为深度。
思路是分治法(当然BFS也可以做),由于要带权,所以当进入下一层遍历的时候,需要将深度这个参数传递下去。代码如下:
import java.util.List;
public class Solution {
public int depthSum(List<NestedInteger> nestedList) {
// Write your code here
return dfs(nestedList, 1);
}
// 返回这个nestedList里的所有NestedInteger的带权和的总和
private int dfs(List<NestedInteger> nestedList, int depth) {
// 如果这个list为空,返回0
if (nestedList == null || nestedList.isEmpty()) {
return 0;
}
int sum = 0;
// 开始遍历这个list
for (NestedInteger nestedInteger : nestedList) {
// 如果它是个整数,那就累加它乘以自己的深度
// 否则说明它是个list,那就累加它的带权和,将权值传递下去
if (nestedInteger.isInteger()) {
sum += nestedInteger.getInteger() * depth;
} else {
sum += dfs(nestedInteger.getList(), depth + 1);
}
}
return sum;
}
}
interface NestedInteger {
// @return true if this NestedInteger holds a single integer,
// rather than a nested list.
boolean isInteger();
// @return the single integer that this NestedInteger holds,
// if it holds a single integer
// Return null if this NestedInteger holds a nested list
Integer getInteger();
// @return the nested list that this NestedInteger holds,
// if it holds a nested list
// Return null if this NestedInteger holds a single integer
List<NestedInteger> getList();
}
时间复杂度,空间。