给你一个整数num。你可以对它进行如下步骤恰好两次:
选择一个数字x(0<=x<=9).
选择另一个数字y(0<=y<=9),数字y可以等于x
将num中所有出现x的数位都用y替换。
得到的新的整数不能有前导0,得到的新整数也不能是0 。
令两次num的操作得到的结果分别为a和b。
请你返回a和b的最大差值 。
示例 1:
输入:num = 555
输出:888
解释:第一次选择 x = 5 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 5 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 999 和 b = 111 ,最大差值为 888
示例 2:
输入:num = 9
输出:8
解释:第一次选择 x = 9 且 y = 9 ,并把得到的新数字保存在 a 中。
第二次选择 x = 9 且 y = 1 ,并把得到的新数字保存在 b 中。
现在,我们有 a = 9 和 b = 1 ,最大差值为 8
class Solution:
def maxDiff(self, num: int) -> int:
num_str = str(num)
num_str_max = num_str
num_str_min = num_str
for i in range(len(num_str_max)):
if num_str_max[i] != "9":
num_str_max = num_str_max.replace(num_str_max[i], '9')
break
if num_str_min[0] != '1':
num_str_min = num_str_min.replace(num_str_min[0], '1')
else:
for i in range(1, len(num_str_min)):
if num_str_min[i] != "0" and num_str_min[i] != "1":
num_str_min = num_str_min.replace(num_str_min[i], '0')
break
return int(num_str_max) - int(num_str_min)
思路:
1.第一次循环,从前往后寻找第一个不是9的数字,转变为9
2.第二次循环,如果首项不是1,则转变为1,最小
如果首项是1,则从第二项寻找不是0,且不是1的数字,转变为0.
(因为首项不能为0,当首项为1的时候,转变的数字不能为1)
网友评论