LeetCode 339: Nested List Weight Sum (DFS / Recursion)
LeetCode 339DFSRecursionSource: https://leetcode.com/problems/nested-list-weight-sum/
English
Each integer contributes value * depth. So we do DFS and pass current depth.
class Solution {
public int depthSum(List<NestedInteger> nestedList) {
return dfs(nestedList, 1);
}
private int dfs(List<NestedInteger> list, int depth) {
int sum = 0;
for (NestedInteger ni : list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
}
}func depthSum(nestedList []*NestedInteger) int {
var dfs func([]*NestedInteger, int) int
dfs = func(list []*NestedInteger, depth int) int {
sum := 0
for _, ni := range list {
if ni.IsInteger() {
sum += ni.GetInteger() * depth
} else {
sum += dfs(ni.GetList(), depth+1)
}
}
return sum
}
return dfs(nestedList, 1)
}class Solution {
public:
int dfs(vector<NestedInteger>& list, int depth) {
int sum = 0;
for (auto &ni : list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
}
int depthSum(vector<NestedInteger>& nestedList) {
return dfs(nestedList, 1);
}
};class Solution:
def depthSum(self, nestedList: List[NestedInteger]) -> int:
def dfs(arr, depth):
s = 0
for ni in arr:
if ni.isInteger():
s += ni.getInteger() * depth
else:
s += dfs(ni.getList(), depth + 1)
return s
return dfs(nestedList, 1)var depthSum = function(nestedList) {
const dfs = (list, depth) => {
let sum = 0;
for (const ni of list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
};
return dfs(nestedList, 1);
};中文
每个整数的贡献是 值 × 深度,所以递归 DFS 时把深度往下传即可。
class Solution {
public int depthSum(List<NestedInteger> nestedList) {
return dfs(nestedList, 1);
}
private int dfs(List<NestedInteger> list, int depth) {
int sum = 0;
for (NestedInteger ni : list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
}
}func depthSum(nestedList []*NestedInteger) int {
var dfs func([]*NestedInteger, int) int
dfs = func(list []*NestedInteger, depth int) int {
sum := 0
for _, ni := range list {
if ni.IsInteger() {
sum += ni.GetInteger() * depth
} else {
sum += dfs(ni.GetList(), depth+1)
}
}
return sum
}
return dfs(nestedList, 1)
}class Solution {
public:
int dfs(vector<NestedInteger>& list, int depth) {
int sum = 0;
for (auto &ni : list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
}
int depthSum(vector<NestedInteger>& nestedList) {
return dfs(nestedList, 1);
}
};class Solution:
def depthSum(self, nestedList: List[NestedInteger]) -> int:
def dfs(arr, depth):
s = 0
for ni in arr:
if ni.isInteger():
s += ni.getInteger() * depth
else:
s += dfs(ni.getList(), depth + 1)
return s
return dfs(nestedList, 1)var depthSum = function(nestedList) {
const dfs = (list, depth) => {
let sum = 0;
for (const ni of list) {
if (ni.isInteger()) sum += ni.getInteger() * depth;
else sum += dfs(ni.getList(), depth + 1);
}
return sum;
};
return dfs(nestedList, 1);
};
Comments