项目场景:
给你一个整数 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 <= 108
问题描述
根据题意,这题需要返回num中恰好一个数字进行替换(一个数字替换后,相同的数字都要换),得到的最大值和最小值的差。那如何获得最大值呢,遍历num,从高位到低位如果不为9,则将此位变为9,与此位相同的全变为9;最小值同理,如果此位不为0,则将此位变成0,与此位相同的全变为0.
直接版:
class Solution:def minMaxDifference(self, num: int) -> int:s=str(num)cnt=list(s)cnt1=cnt.copy()n=len(cnt)a=b=0for i in range(n):if int(cnt[i])!=9 and not a:a=cnt[i]cnt[i]=str(9)if cnt[i]==a:cnt[i]=str(9)for i in range(n):if int(cnt1[i])!=0 and not b:b=cnt1[i]cnt1[i]=str(0)if cnt1[i]==b:cnt1[i]=str(0)return int("".join(cnt))-int("".join(cnt1))
优化版(运用replace函数,但原理与上相同):
class Solution:def minMaxDifference(self, num: int) -> int:s=str(num)mx=numfor c in s:if c!="9":mx=int(s.replace(c,"9"))breakmn=int(s.replace(s[0],"0"))return mx-mn
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!