Wednesday, March 25, 2020

339. Nested List Weight Sum

Given a nested list of integers, return the sum of all integers in the list weighted by their depth.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Input: [[1,1],2,[1,1]]
Output: 10 
Explanation: Four 1's at depth 2, one 2 at depth 1.
Example 2:
Input: [1,[4,[6]]]
Output: 27 
Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3; 1 + 4*2 + 6*3 = 27.

class Solution {
public:
    int depthSum(vector<NestedInteger>& nestedList) {
        if (nestedList.size() == 0) {
            return 0;
        }
        queue<NestedInteger> q;
        for (auto entry : nestedList) {
            q.push(entry);
        }
        int ans = 0;
        int height = 0;
        while (!q.empty()) {
            int size = q.size();
            height++;
            for (int i = 0; i < size; i++) {
                NestedInteger entry = q.front(); q.pop();
                if (entry.isInteger()) {
                    ans += height * entry.getInteger();
                } else {
                    for (auto node : entry.getList()) {
                        q.push(node);
                    }
                }
            }
        }
        return ans;
    }
};

class Solution { public: int depthSumRec(vector<NestedInteger>&nestedList, int dt) { int cur_sum = 0; for(auto &i : nestedList) { if(i.isInteger()) { cur_sum += (i.getInteger()) * dt; } else { cur_sum += depthSumRec(i.getList(), dt + 1); } } return cur_sum; } int depthSum(vector<NestedInteger>& nestedList) { return depthSumRec(nestedList, 1); } };

No comments:

Post a Comment