leetcode 2566. 替换一个数字后的最大差值 简单
给你一个整数 num
。你知道 Danny Mittal 会偷偷将 0
到 9
中的一个数字 替换 成另一个数字。
请你返回将 num
中 恰好一个 数字进行替换后,得到的最大值和最小值的差为多少。
注意:
- 当 Danny 将一个数字
d1
替换成另一个数字d2
时,Danny 需要将nums
中所有d1
都替换成d2
。 - Danny 可以将一个数字替换成它自己,也就是说
num
可以不变。 - Danny 可以将数字分别替换成两个不同的数字分别得到最大值和最小值。
- 替换后得到的数字可以包含前导 0 。
- Danny Mittal 获得周赛 326 前 10 名,让我们恭喜他。
示例 1:
输入:num = 11891 输出:99009 解释: 为了得到最大值,我们将数字 1 替换成数字 9 ,得到 99899 。 为了得到最小值,我们将数字 1 替换成数字 0 ,得到 890 。 两个数字的差值为 99009 。
示例 2:
输入:num = 90 输出:99 解释: 可以得到的最大值是 99(将 0 替换成 9),最小值是 0(将 9 替换成 0)。 所以我们得到 99 。
提示:
1 <= num <= 10^8
分析:用一个数组存储 num 的每位数字。之后从高位向低位检查,将第一个不是 9 的数字都改成 9,得到最大值;将第一个不是 0 的数字改为 0,得到最小值。最后相减得到答案。
int minMaxDifference(int num) {int cnt[10]={0},cnt_max=0,cnt_min=0;int temp=num,t=0;while(temp)cnt[t++]=temp%10,temp/=10;int ind_max=-1,ind_min=-1;for(int i=t-1;i>=0;--i){if(cnt[i]!=9&&ind_max==-1)ind_max=cnt[i];if(cnt[i]!=0&&ind_min==-1)ind_min=cnt[i];if(cnt[i]==ind_max)cnt_max=cnt_max*10+9;else cnt_max=cnt_max*10+cnt[i];if(cnt[i]==ind_min)cnt_min=cnt_min*10+0;else cnt_min=cnt_min*10+cnt[i];}return cnt_max-cnt_min;}