364. Nested List Weight Sum II
2018-03-24 11:33
239 查看
https://leetcode.com/problems/nested-list-weight-sum-ii/description/
题目大意:与339. Nested List Weight Sum反过来,求嵌套数组的加权和,只不过权重是和深度反过来,最深一层权重为1.
解题思路:一开始想用反过来回溯的方法,然并卵,最后只能放弃,还是339题的思路,正向递归,将每层的数记录在向量record中,第i层的数之和为record[i].最后再反向遍历record求加权和即可.
代码:
题目大意:与339. Nested List Weight Sum反过来,求嵌套数组的加权和,只不过权重是和深度反过来,最深一层权重为1.
Example 1: Given the list [[1,1],2,[1,1]], return 8. (four 1's at depth 1, one 2 at depth 2) Example 2: Given the list [1,[4,[6]]], return 17. (one 1 at depth 3, one 4 at depth 2, and one 6 at depth 1; 1*3 + 4*2 + 6*1 = 17)
解题思路:一开始想用反过来回溯的方法,然并卵,最后只能放弃,还是339题的思路,正向递归,将每层的数记录在向量record中,第i层的数之和为record[i].最后再反向遍历record求加权和即可.
代码:
class Solution { public: int depthSumInverse(vector<NestedInteger>& nestedList) { vector<int> record; //记录表 for (auto nl : nestedList) { dfs(nl, 0, record); } int sum = 0; //反向遍历求加权 for (int i = record.size()-1, level = 1; i >= 0; i--, level++) { sum += level * record[i]; } return sum; } void dfs(NestedInteger &nestedList, int depth, vector<int>& record) { if (record.size() < depth+1) record.resize(depth+1); //record按需扩张 if (nestedList.isInteger()) { record[depth] += nestedList.getInteger(); //递归出口,记录该层数之和 } else { for (auto nl : nestedList.getList()) { dfs(nl, depth+1, record); } } } };
相关文章推荐
- Medium 364题 Nested List Weight Sum II
- Leetcode 364 Nested List Weight Sum II
- 364. Nested List Weight Sum II
- 364. Nested List Weight Sum II
- 364. Nested List Weight Sum II
- Nested List Weight Sum II
- LeetCode Nested List Weight Sum II
- [LeetCode] Nested List Weight Sum II 嵌套链表权重和之二
- Nested List Weight Sum II
- Nested List Weight Sum II
- Leetcode: Nested List Weight Sum II
- Nested List Weight Sum II
- Nested List Weight Sum I & II
- LeetCode Nested List Weight Sum
- [Leetcode] 364. Nested List Weight Sum II 解题报告
- [LeetCode] Nested List Weight Sum 嵌套链表权重和
- Nested List Weight Sum
- LeetCod 339.Nested List Weight Sum
- LeetCode "Nested List Weight Sum"
- Leetcode 339 Nested List Weight Sum