Skip to content

2457. Minimum Addition to Make Integer Beautiful

Difficulty Topics

Description

You are given two positive integers n and target.

An integer is considered beautiful if the sum of its digits is less than or equal to target.

Return the minimum non-negative integer x such that n + x is beautiful. The input will be generated such that it is always possible to make n beautiful.

 

Example 1:

Input: n = 16, target = 6
Output: 4
Explanation: Initially n is 16 and its digit sum is 1 + 6 = 7. After adding 4, n becomes 20 and digit sum becomes 2 + 0 = 2. It can be shown that we can not make n beautiful with adding non-negative integer less than 4.

Example 2:

Input: n = 467, target = 6
Output: 33
Explanation: Initially n is 467 and its digit sum is 4 + 6 + 7 = 17. After adding 33, n becomes 500 and digit sum becomes 5 + 0 + 0 = 5. It can be shown that we can not make n beautiful with adding non-negative integer less than 33.

Example 3:

Input: n = 1, target = 1
Output: 0
Explanation: Initially n is 1 and its digit sum is 1, which is already smaller than or equal to target.

 

Constraints:

  • 1 <= n <= 1012
  • 1 <= target <= 150
  • The input will be generated such that it is always possible to make n beautiful.

Solution

minimum-addition-to-make-integer-beautiful.py
class Solution:
    def makeIntegerBeautiful(self, n: int, target: int) -> int:
        ns = list(str(n))
        N = len(ns)
        res = 10 ** (N + 1) - n

        def countDigits(x):
            digitSum = 0

            while x > 0:
                digitSum += x % 10
                x //= 10

            return digitSum

        def go(index, curr):
            nonlocal res

            if index == -1:
                ds = countDigits(curr)

                if ds <= target:
                    res = min(res, curr - n)

                return

            go(index - 1, curr)

            d = 10 ** (N - index)
            to_add = d - curr % d
            go(index - 1, curr + to_add)

        go(N - 1, n)
        return res