在Python中编写程序以查找列表中每个元素的所有连接对的和?
假设我们有一个名为nums的数字列表。我们必须找到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:=新映射
nums1:= nums
temp:= 0
c:= nums1中所有元素的总和
a:= nums的大小
for i in range 0 to a,do
如果nums [i]和0相同,则
temp:= temp + c
否则,
如果nums [i]存在于memo中,则
temp:= temp + memo [nums [i]]
否则,
b:= 0
for j in range 0 to a,do
b:= b +整数(nums [i]连接nums1 [j])
memo [nums [i]]:= b
temp:= temp + memo [nums [i]]
返回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