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

파이썬에서 목록의 모든 각 요소의 연결된 쌍의 합을 찾는 프로그램은 무엇입니까?

<시간/>

nums라는 숫자 목록이 있다고 가정합니다. 우리는 숫자로 된 모든 숫자 쌍의 모든 연결의 합을 찾아야 합니다. 여기서 쌍(i, j)과 쌍(j, i)은 서로 다른 것으로 간주됩니다.

따라서 입력이 nums =[5, 3]과 같으면 다음 연결이 있으므로 출력은 176이 됩니다. (nums[0] + nums[0]) =(5 concat 5) =55, ( nums[0] + nums[1]) =(5 concat 3) =53, (nums[1] + nums[0]) =(3 concat 5) =35, (nums[0] + nums[0]) =(3 concat 3) =33이면 합계는 55 + 53 + 35 + 33 =176입니다.

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

memo := a new map
nums1 := nums
temp := 0
c := sum of all elements in nums1
a := size of nums
for i in range 0 to a, do
   if nums[i] is same as 0, then
      temp := temp + c
   otherwise,
      if nums[i] is present in memo, then
         temp := temp + memo[nums[i]]
      otherwise,
         b := 0
         for j in range 0 to a, do
            b := b + integer of (nums[i] concatenate nums1[j])
         memo[nums[i]] := b
         temp := temp + memo[nums[i]]
return temp

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

class Solution:
   def solve(self, nums):
      memo = {}
      nums1 = nums
      temp = 0
      c = sum(nums1)
      a = len(nums)
      for i in range(a):
         if nums[i] == 0:
            temp += c
         else:
            if nums[i] in memo:
               temp += memo[nums[i]]
            else:
               b = 0
               for j in range(a):
                  b += int(str(nums[i]) + str(nums1[j]))
               memo[nums[i]] = b
               temp += memo[nums[i]]
      return temp

ob = Solution()
nums = [5, 3]
print(ob.solve(nums))

입력

[5, 3]

출력

176