给你两个正整数 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 。
思路:
从最低位往高位看,每次把这一位补成10,就会减少原来这一位的数,往前遍历,直到小于target
代码:
class Solution {
public:
long long makeIntegerBeautiful(long long n, int target) {
vector<int> a;
stack<int> res;
int len=0;
long long m = n;
while(m){
a.push_back(m%10);
len += m%10;
m/=10;
}
a.push_back(0);
if(len<=target)return 0;
for(int i=0;i<a.size();i++){
if(len+1<=target)break;
if(i==0){
res.push(10-a[i]);
len -= a[i];
}else{
res.push(9-a[i]);
len -= a[i];
}
}
long long ans=0;
while(!res.empty()){
ans*=10;
ans += res.top();
res.pop();
}
return ans;
}
};