<filename>scripts/practice/FB/NestedListWeightSum.py
"""

Nested List Weight Sum

You are given a nested list of integers nestedList. Each element is either an integer or a 
list whose elements may also be integers or other lists.

The depth of an integer is the number of lists that it is inside of. For example, 
the nested list [1,[2,2],[[3],2],1] has each integer's value set to its depth.

Return the sum of each integer in nestedList multiplied by its depth.

Example 1:

Input: nestedList = [[1,1],2,[1,1]]
Output: 10
Explanation: Four 1's at depth 2, one 2 at depth 1. 1*2 + 1*2 + 2*1 + 1*2 + 1*2 = 10.

Example 2:

Input: nestedList = [1,[4,[6]]]
Output: 27
Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3. 1*1 + 4*2 + 6*3 = 27.

Example 3:

Input: nestedList = [0]
Output: 0

Constraints:

1 <= nestedList.length <= 50
The values of the integers in the nested list is in the range [-100, 100].
The maximum depth of any integer is less than or equal to 50.

"""

#  DFS

from collections import deque


class Solution:
    def depthSum(self, nestedList):

        def dfs(nested_list, depth):
            total = 0
            for nested in nested_list:
                if nested.isInteger():
                    total += nested.getInteger() * depth
                else:
                    total += dfs(nested.getList(), depth + 1)
            return total

        return dfs(nestedList, 1)


# BFS


class Solution:
    def depthSum(self, nestedList):
        queue = deque(nestedList)

        depth = 1
        total = 0

        while len(queue) > 0:
            for i in range(len(queue)):
                nested = queue.pop()
                if nested.isInteger():
                    total += nested.getInteger() * depth
                else:
                    queue.extendleft(nested.getList())
            depth += 1

        return total

<filename>scripts/practice/FB/NestedListWeightSum.py
"""

Nested List Weight Sum

You are given a nested list of integers nestedList. Each element is either an integer or a 
list whose elements may also be integers or other lists.

The depth of an integer is the number of lists that it is inside of. For example, 
the nested list [1,[2,2],[[3],2],1] has each integer's value set to its depth.

Return the sum of each integer in nestedList multiplied by its depth.

Example 1:

Input: nestedList = [[1,1],2,[1,1]]
Output: 10
Explanation: Four 1's at depth 2, one 2 at depth 1. 1*2 + 1*2 + 2*1 + 1*2 + 1*2 = 10.

Example 2:

Input: nestedList = [1,[4,[6]]]
Output: 27
Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3. 1*1 + 4*2 + 6*3 = 27.

Example 3:

Input: nestedList = [0]
Output: 0

Constraints:

1 <= nestedList.length <= 50
The values of the integers in the nested list is in the range [-100, 100].
The maximum depth of any integer is less than or equal to 50.

"""

#  DFS

from collections import deque


class Solution:
    def depthSum(self, nestedList):

        def dfs(nested_list, depth):
            total = 0
            for nested in nested_list:
                if nested.isInteger():
                    total += nested.getInteger() * depth
                else:
                    total += dfs(nested.getList(), depth + 1)
            return total

        return dfs(nestedList, 1)


# BFS


class Solution:
    def depthSum(self, nestedList):
        queue = deque(nestedList)

        depth = 1
        total = 0

        while len(queue) > 0:
            for i in range(len(queue)):
                nested = queue.pop()
                if nested.isInteger():
                    total += nested.getInteger() * depth
                else:
                    queue.extendleft(nested.getList())
            depth += 1

        return total

Nested List Weight Sum  You are given a nested list of integers nestedList. Each element is either an integer or a  list whose elements may also be integers or other lists.  The depth of an integer is the number of lists that it is inside of. For example,  the nested list [1,[2,2],[[3],2],1] has each integer's value set to its depth.  Return the sum of each integer in nestedList multiplied by its depth.  Example 1:  Input: nestedList = [[1,1],2,[1,1]] Output: 10 Explanation: Four 1's at depth 2, one 2 at depth 1. 1*2 + 1*2 + 2*1 + 1*2 + 1*2 = 10.  Example 2:  Input: nestedList = [1,[4,[6]]] Output: 27 Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3. 1*1 + 4*2 + 6*3 = 27.  Example 3:  Input: nestedList = [0] Output: 0  Constraints:  1 <= nestedList.length <= 50 The values of the integers in the nested list is in the range [-100, 100]. The maximum depth of any integer is less than or equal to 50. #  DFS # BFS