Problem Link

Description


You are given a 0-indexed array nums consisting of positive integers. You can choose two indices i and j, such that i != j, and the sum of digits of the number nums[i] is equal to that of nums[j].

Return the maximum value of nums[i] + nums[j] that you can obtain over all possible indices i and j that satisfy the conditions.

 

Example 1:

Input: nums = [18,43,36,13,7]
Output: 54
Explanation: The pairs (i, j) that satisfy the conditions are:
- (0, 2), both numbers have a sum of digits equal to 9, and their sum is 18 + 36 = 54.
- (1, 4), both numbers have a sum of digits equal to 7, and their sum is 43 + 7 = 50.
So the maximum sum that we can obtain is 54.

Example 2:

Input: nums = [10,12,19,14]
Output: -1
Explanation: There are no two numbers that satisfy the conditions, so we return -1.

 

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109

Solution


Python3

class Solution:
    def maximumSum(self, nums: List[int]) -> int:
        N = len(nums)
        res = -1
        digits = {}
 
        for x in nums:
            d = 0
            curr = x
            while curr > 0:
                d += curr % 10
                curr //= 10
            
            if d in digits:
                res = max(res, x + digits[d])
                digits[d] = max(digits[d], x)
            else:
                digits[d] = x
 
        return res