题目链接:2457. 美丽整数的最小增量
给你两个正整数 n
和 target
。
如果某个整数每一位上的数字相加小于或等于 target
,则认为这个整数是一个 美丽整数 。
找出并返回满足 n + x
是 美丽整数 的最小非负整数 x
。生成的输入保证总可以使 n
变成一个美丽整数。
示例 1:
输入:n = 16, target = 6
输出:4
解释:最初,n 是 16 ,且其每一位数字的和是 1 + 6 = 7 。在加 4 之后,n 变为 20 且每一位数字的和变成 2 + 0 = 2 。可以证明无法加上一个小于 4 的非负整数使 n 变成一个美丽整数。
示例 2:
输入:n = 467, target = 6
输出:33
解释:最初,n 是 467 ,且其每一位数字的和是 4 + 6 + 7 = 17 。在加 33 之后,n 变为 500 且每一位数字的和变成 5 + 0 + 0 = 5 。可以证明无法加上一个小于 33 的非负整数使 n 变成一个美丽整数。
示例 3:
输入:n = 1, target = 1
输出:0
解释:最初,n 是 1 ,且其每一位数字的和是 1 ,已经小于等于 target 。
提示:
- 1 <= n <= 1012
- 1 <= target <= 150
- 生成的输入保证总可以使 n 变成一个美丽整数。
解题思路
算法思路
- 得到当前数字的各位数字之和,如果
<=target
就直接返回0。 - 当前值各位数之和大于了target,那么考虑进行进位,当前数大于,那么个位的数字往上变大更不可能满足条件
- 寻找最小值,末尾为0则最小 所以我们令此时的个位为0,十位进1,同理,如果计算后仍旧大于target,我们将十位变为0,百位进1
举个例子:n = 467, target = 6
123 和为6>3,那么124-129的各位数和不可能小于6,直到进位后130达到4才小于123的6
130 和为4>3 那么131-139也不可能小于4,也只有进位后200才小于130的4
200 和为2<3,所以200-123的差就是最小增量
当满足条件后,此时的值减去原值就是最小的数字
Python代码
import math
class Solution:
def sub(self, n: int):
count: int = 0
while n > 0:
count = count + n % 10
n = math.floor(n / 10)
return count
def makeIntegerBeautiful(self, n: int, target: int) -> int:
if self.sub(n) <= target:
return 0
i = 10
t = n
while (self.sub(t) > target):
t = math.floor(t / i)
t = t +1
t = t * i
i = i *10
x = t - n
return x
标签:小于,数字,int,2457,整数,美丽,LeetCode,target
From: https://www.cnblogs.com/tangjielin/p/17205385.html