返回介绍

solution / 0300-0399 / 0339.Nested List Weight Sum / README

发布于 2024-06-17 01:04:01 字数 6432 浏览 0 评论 0 收藏 0

339. 嵌套列表加权和

English Version

题目描述

给定一个嵌套的整数列表 nestedList ,每个元素要么是整数,要么是列表。同时,列表中元素同样也可以是整数或者是另一个列表。

整数的 深度 是其在列表内部的嵌套层数。例如,嵌套列表 [1,[2,2],[[3],2],1] 中每个整数的值就是其深度。

请返回该列表按深度加权后所有整数的总和。

 

示例 1:

输入:nestedList = [[1,1],2,[1,1]]
输出:10 
解释:因为列表中有四个深度为 2 的 1 ,和一个深度为 1 的 2。

示例 2:

输入:nestedList = [1,[4,[6]]]
输出:27 
解释:一个深度为 1 的 1,一个深度为 2 的 4,一个深度为 3 的 6。所以,1 + 4*2 + 6*3 = 27。

示例 3:

输入:nestedList = [0]
输出:0

 

提示:

  • 1 <= nestedList.length <= 50
  • 嵌套列表中整数的值在范围 [-100, 100]
  • 任何整数的最大 深度 都小于或等于 50

解法

方法一

# """
# This is the interface that allows for creating nested lists.
# You should not implement it, or speculate about its implementation
# """
# class NestedInteger:
#  def __init__(self, value=None):
#    """
#    If value is not specified, initializes an empty list.
#    Otherwise initializes a single integer equal to value.
#    """
#
#  def isInteger(self):
#    """
#    @return True if this NestedInteger holds a single integer, rather than a nested list.
#    :rtype bool
#    """
#
#  def add(self, elem):
#    """
#    Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
#    :rtype void
#    """
#
#  def setInteger(self, value):
#    """
#    Set this NestedInteger to hold a single integer equal to value.
#    :rtype void
#    """
#
#  def getInteger(self):
#    """
#    @return the single integer that this NestedInteger holds, if it holds a single integer
#    Return None if this NestedInteger holds a nested list
#    :rtype int
#    """
#
#  def getList(self):
#    """
#    @return the nested list that this NestedInteger holds, if it holds a nested list
#    Return None if this NestedInteger holds a single integer
#    :rtype List[NestedInteger]
#    """
class Solution:
  def depthSum(self, nestedList: List[NestedInteger]) -> int:
    def dfs(nestedList, depth):
      depth_sum = 0
      for item in nestedList:
        if item.isInteger():
          depth_sum += item.getInteger() * depth
        else:
          depth_sum += dfs(item.getList(), depth + 1)
      return depth_sum

    return dfs(nestedList, 1)
/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * public interface NestedInteger {
 *   // Constructor initializes an empty nested list.
 *   public NestedInteger();
 *
 *   // Constructor initializes a single integer.
 *   public NestedInteger(int value);
 *
 *   // @return true if this NestedInteger holds a single integer, rather than a nested list.
 *   public boolean isInteger();
 *
 *   // @return the single integer that this NestedInteger holds, if it holds a single integer
 *   // Return null if this NestedInteger holds a nested list
 *   public Integer getInteger();
 *
 *   // Set this NestedInteger to hold a single integer.
 *   public void setInteger(int value);
 *
 *   // Set this NestedInteger to hold a nested list and adds a nested integer to it.
 *   public void add(NestedInteger ni);
 *
 *   // @return the nested list that this NestedInteger holds, if it holds a nested list
 *   // Return empty list if this NestedInteger holds a single integer
 *   public List<NestedInteger> getList();
 * }
 */
class Solution {
  public int depthSum(List<NestedInteger> nestedList) {
    return dfs(nestedList, 1);
  }

  private int dfs(List<NestedInteger> nestedList, int depth) {
    int depthSum = 0;
    for (NestedInteger item : nestedList) {
      if (item.isInteger()) {
        depthSum += item.getInteger() * depth;
      } else {
        depthSum += dfs(item.getList(), depth + 1);
      }
    }
    return depthSum;
  }
}
/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * function NestedInteger() {
 *
 *   Return true if this NestedInteger holds a single integer, rather than a nested list.
 *   @return {boolean}
 *   this.isInteger = function() {
 *     ...
 *   };
 *
 *   Return the single integer that this NestedInteger holds, if it holds a single integer
 *   Return null if this NestedInteger holds a nested list
 *   @return {integer}
 *   this.getInteger = function() {
 *     ...
 *   };
 *
 *   Set this NestedInteger to hold a single integer equal to value.
 *   @return {void}
 *   this.setInteger = function(value) {
 *     ...
 *   };
 *
 *   Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
 *   @return {void}
 *   this.add = function(elem) {
 *     ...
 *   };
 *
 *   Return the nested list that this NestedInteger holds, if it holds a nested list
 *   Return null if this NestedInteger holds a single integer
 *   @return {NestedInteger[]}
 *   this.getList = function() {
 *     ...
 *   };
 * };
 */
/**
 * @param {NestedInteger[]} nestedList
 * @return {number}
 */
var depthSum = function (nestedList) {
  const dfs = (nestedList, depth) => {
    let depthSum = 0;
    for (const item of nestedList) {
      if (item.isInteger()) {
        depthSum += item.getInteger() * depth;
      } else {
        depthSum += dfs(item.getList(), depth + 1);
      }
    }
    return depthSum;
  };
  return dfs(nestedList, 1);
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文