题目如下:
You are given an integer
num. You will apply the following steps exactly two times:
- Pick a digit
x (0 <= x <= 9).- Pick another digit
y (0 <= y <= 9). The digitycan be equal tox.- Replace all the occurrences of
xin the decimal representation ofnumbyy.- The new integer cannot have any leading zeros, also the new integer cannot be 0.
Let
aandbbe the results of applying the operations tonumthe first and second times, respectively.Return the max difference between
aandb.Example 1:
Input: num = 555 Output: 888 Explanation: The first time pick x = 5 and y = 9 and store the new integer in a. The second time pick x = 5 and y = 1 and store the new integer in b. We have now a = 999 and b = 111 and max difference = 888Example 2:
Input: num = 9 Output: 8 Explanation: The first time pick x = 9 and y = 9 and store the new integer in a. The second time pick x = 9 and y = 1 and store the new integer in b. We have now a = 9 and b = 1 and max difference = 8Example 3:
Input: num = 123456 Output: 820000Example 4:
Input: num = 10000 Output: 80000Example 5:
Input: num = 9288 Output: 8700Constraints:
1 <= num <= 10^8
解题思路:最大值很好求,把第一个不是9的数字替换成9即可。最小值分两种情况,如果最高位不为1,那么替换成1;否则,找出第一个不为0的数字替换成0。
代码如下:
class Solution(object): def maxDiff(self, num): """ :type num: int :rtype: int """ str_num = str(num) max_replace = '9' min_replace = '0' for i in str_num: if i != '9': max_replace = i break replace_val = '0' if str_num[0] != '1': min_replace = str_num[0] replace_val = '1' else: for i in str_num: if i != '0' and i != str_num[0]: min_replace = i break max_num = str_num.replace(max_replace,'9') min_num = str_num.replace(min_replace,replace_val) return int(max_num) - int(min_num)