Giả sử chúng ta có một danh sách các số được gọi là nums. Chúng ta phải tìm tổng của mọi phép ghép của mọi cặp số trong nums. Ở đây cặp (i, j) và cặp (j, i) được coi là khác nhau.
Vì vậy, nếu đầu vào là nums =[5, 3], thì đầu ra sẽ là 176, vì Chúng ta có các nối sau:(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, khi đó tổng là 55 + 53 + 35 + 33 =176
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:
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
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:
Ví dụ
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))
Đầu vào
[5, 3]
Đầu ra
176