Leetcode 364 Solution

This article provides solution to leetcode question 364 (nested-list-weight-sum-ii)

https://leetcode.com/problems/nested-list-weight-sum-ii

Solution

/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * class NestedInteger {
 *   public:
 *     // Constructor initializes an empty nested list.
 *     NestedInteger();
 *
 *     // Constructor initializes a single integer.
 *     NestedInteger(int value);
 *
 *     // Return true if this NestedInteger holds a single integer, rather than a nested list.
 *     bool isInteger() const;
 *
 *     // Return the single integer that this NestedInteger holds, if it holds a single integer
 *     // The result is undefined if this NestedInteger holds a nested list
 *     int getInteger() const;
 *
 *     // Set this NestedInteger to hold a single integer.
 *     void setInteger(int value);
 *
 *     // Set this NestedInteger to hold a nested list and adds a nested integer to it.
 *     void add(const NestedInteger &ni);
 *
 *     // Return the nested list that this NestedInteger holds, if it holds a nested list
 *     // The result is undefined if this NestedInteger holds a single integer
 *     const vector<NestedInteger> &getList() const;
 * };
 */
class Solution {
    vector<int> sums;
public:
    void depthSumInverse(NestedInteger& integer, int layer)
    {
        if (integer.isInteger())
        {
            if (sums.size() <= layer)
                sums.resize(layer + 1);
            sums[layer] += integer.getInteger();
            return;
        }
        else
        {
            auto subintegers = integer.getList();
            for (auto subinteger : subintegers)
                depthSumInverse(subinteger, layer + 1);
        }
    }

    int depthSumInverse(vector<NestedInteger>& nestedList) {
        for (auto integer : nestedList)
            depthSumInverse(integer, 1);

        int res = 0;
        for (int i = 1; i < sums.size(); i++)
        {
            int weight = sums.size() - i;
            res += weight * sums[i];
        }
        return res;
    }
};