Program to find sum of concatenated pairs of all each element in a list in Python?

Given a list of numbers, we need to find the sum of all possible concatenated pairs. Each pair (i, j) where i and j are indices is considered different from pair (j, i).

For example, with nums = [5, 3], we get concatenations: 55, 53, 35, 33, which sum to 176.

Algorithm

We use memoization to avoid recalculating concatenations for duplicate numbers ?

def find_concatenated_sum(nums):
    memo = {}
    total_sum = 0
    n = len(nums)
    
    for i in range(n):
        if nums[i] == 0:
            # Special case: concatenating 0 with any number gives that number
            total_sum += sum(nums)
        else:
            if nums[i] in memo:
                total_sum += memo[nums[i]]
            else:
                # Calculate sum of all concatenations starting with nums[i]
                concatenation_sum = 0
                for j in range(n):
                    concatenated_value = int(str(nums[i]) + str(nums[j]))
                    concatenation_sum += concatenated_value
                
                memo[nums[i]] = concatenation_sum
                total_sum += concatenation_sum
    
    return total_sum

# Test the function
nums = [5, 3]
result = find_concatenated_sum(nums)
print(f"Sum of concatenated pairs: {result}")
Sum of concatenated pairs: 176

Step-by-Step Breakdown

Let's trace through the example with nums = [5, 3] ?

def find_concatenated_sum_with_trace(nums):
    memo = {}
    total_sum = 0
    n = len(nums)
    
    print(f"Input: {nums}")
    print("Calculating concatenations:")
    
    for i in range(n):
        print(f"\nProcessing nums[{i}] = {nums[i]}")
        
        if nums[i] == 0:
            addition = sum(nums)
            total_sum += addition
            print(f"  Special case for 0: adding {addition}")
        else:
            if nums[i] in memo:
                addition = memo[nums[i]]
                total_sum += addition
                print(f"  Found in memo: adding {addition}")
            else:
                concatenation_sum = 0
                concatenations = []
                
                for j in range(n):
                    concatenated_value = int(str(nums[i]) + str(nums[j]))
                    concatenation_sum += concatenated_value
                    concatenations.append(f"{nums[i]} + {nums[j]} = {concatenated_value}")
                
                memo[nums[i]] = concatenation_sum
                total_sum += concatenation_sum
                
                print(f"  Concatenations: {', '.join(concatenations)}")
                print(f"  Sum for {nums[i]}: {concatenation_sum}")
    
    return total_sum

# Test with trace
nums = [5, 3]
result = find_concatenated_sum_with_trace(nums)
print(f"\nFinal result: {result}")
Input: [5, 3]
Calculating concatenations:

Processing nums[0] = 5
  Concatenations: 5 + 5 = 55, 5 + 3 = 53
  Sum for 5: 108

Processing nums[1] = 3
  Concatenations: 3 + 5 = 35, 3 + 3 = 33
  Sum for 3: 68

Final result: 176

Optimized Class-Based Solution

Here's the solution using a class structure ?

class ConcatenatedSumSolver:
    def solve(self, nums):
        memo = {}
        total_sum = 0
        n = len(nums)
        
        for i in range(n):
            if nums[i] == 0:
                total_sum += sum(nums)
            else:
                if nums[i] in memo:
                    total_sum += memo[nums[i]]
                else:
                    concatenation_sum = 0
                    for j in range(n):
                        concatenated_value = int(str(nums[i]) + str(nums[j]))
                        concatenation_sum += concatenated_value
                    
                    memo[nums[i]] = concatenation_sum
                    total_sum += concatenation_sum
        
        return total_sum

# Test the solution
solver = ConcatenatedSumSolver()
test_cases = [[5, 3], [1, 2, 3], [0, 5]]

for nums in test_cases:
    result = solver.solve(nums)
    print(f"Input: {nums}, Output: {result}")
Input: [5, 3], Output: 176
Input: [1, 2, 3], Output: 396
Input: [0, 5], Output: 60

Key Points

  • Memoization: Stores results for duplicate numbers to avoid recalculation
  • String Concatenation: Uses str(a) + str(b) to concatenate digits
  • Special Case: Handles zero separately since concatenating with 0 follows different rules
  • Time Complexity: O(n²) in worst case when all numbers are unique
  • Space Complexity: O(k) where k is the number of unique elements

Conclusion

This algorithm efficiently calculates the sum of all concatenated pairs using memoization to optimize repeated calculations. The key insight is treating each number as a string for concatenation, then converting back to integer for summation.

Updated on: 2026-03-25T12:11:06+05:30

654 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements