Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 중첩 목록 가중치 합계 II

<시간/>

중첩된 정수 목록이 주어지면 목록에 있는 모든 정수의 합을 깊이로 가중치를 부여하여 반환합니다. 각 요소는 정수이거나 목록입니다. 요소의 요소는 정수 또는 기타 목록일 수도 있습니다. 가중치가 루트에서 리프로 증가하는 이전 질문과 달리 이제 가중치는 아래에서 위로 정의됩니다. 즉, 리프 수준 정수는 가중치가 1이고 루트 수준 정수는 가장 큰 가중치를 갖습니다.

따라서 입력이 [[1,1],2,[1,1]]과 같으면 출력은 깊이 1에서 4개의 1, 깊이 2에서 하나의 2로 8이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • depthSumInverse() 함수를 정의합니다. 중첩 목록이 필요합니다.

  • 아파트:=새 목록

  • 최대값:=0

  • flatten() 함수를 정의합니다. nlst,dist

    가 필요합니다.
  • 거리 :=거리 + 1

  • maxd:=maxd의 최대값, dist

  • nlst의 각 노드에 대해

    • 노드가 정수인 경우 0이 아닌 경우

      • 플랫 끝에 (노드, 거리) 삽입

    • 그렇지 않으면

      • flatten(노드, 거리)

  • flatten(nestedList, 0)

  • 합계:=0

  • 플랫의 각 v,d에 대해 수행

    • 합계 :=합계 + v*(최대d+1-d)

  • 반환 합계

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):def depthSumInverse(self, nestedList):flats=[] self.maxd=0 def flatten(nlst,dist):if isinstance(nlst,list):nlst=nlst dist+=1 self. nlst의 노드에 대한 maxd=max(self.maxd,dist):if isinstance(node,int):flats.append((node,dist)) else:flatten(node,dist) flatten(nestedList,0) summ=0 v,d의 경우:summ+=v*(self.maxd+1-d) return summob =Solution()print(ob.depthSumInverse([[1,1],2,[1,1]])) 

입력

[[1,1],2,[1,1]]

출력

8