Python 中的巢狀列表權重和 II
給定一個整數的巢狀列表,返回列表中所有整數的和,其權重由其深度加權。每個元素要麼是一個整數,要麼是一個列表——其元素也可能是整數或其他列表。與權重從根到葉不斷增加的前一個問題不同,現在的權重是從下向上定義的。即葉級整數的權重為 1,而根級整數的權重最大。
因此,如果輸入類似於 [[1,1],2,[1,1]],那麼輸出將為 8,因為四個 1 的深度為 1,一個 2 的深度為 2。
為了解決這個問題,我們將按照以下步驟進行 −
定義一個函式 depthSumInverse()。這將採用 nestedList
flats: 新列表
maxd: 0
定義一個函式 flatten()。這將採用 nlst,dist
dist := dist + 1
maxd: maxd 的最大值,dist
對於 nlst 中的每個節點,執行
如果節點是一個非零的整數,則
在 flats 的末尾插入 (node,dist)
否則
flatten(node, dist)
flatten(nestedList, 0)
summ: 0
對於 flats 中的每個 v,d,執行
summ := summ + v*(maxd+1-d)
返回 summ
示例
讓我們來看看以下實現以獲得更好的理解 −
class Solution(object): def depthSumInverse(self, nestedList): flats=[] self.maxd=0 def flatten(nlst,dist): if isinstance(nlst,list): nlst=nlst dist+=1 self.maxd=max(self.maxd,dist) for node in nlst: if isinstance(node,int): flats.append((node,dist)) else: flatten(node,dist) flatten(nestedList,0) summ=0 for v,d in flats: summ+=v*(self.maxd+1-d) return summ ob = Solution() print(ob.depthSumInverse([[1,1],2,[1,1]]))
輸入
[[1,1],2,[1,1]]
輸出
8
廣告