问题
思路
贪心
解题过程
通过数学分析可以判断出最大和最小值的替换策略,因此贪心地选择这个最佳策略即可获得结果
最大值:将整数从左到右遍历,把第一个不为 9 的数字替换成 9 即为最大值
最小值:对整数的最高位进行特殊判断(最高位不可能为 0),若最高位不为 1,那么就选择将最高位替换为 1 即可得到最小值,否则就开始向右遍历,遇到第一个不为 0 的数字替换为 0 即为最小值,这里还有一种特殊情况,即这个不为 0 的数字跟最高位数字相等,此时需要跳过这个数字继续遍历(continue
)
复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
Code
class Solution:
def maxDiff(self, num: int) -> int:
s = str(num)
t = s
n = len(s)
max_replace = 0
min_replace = 0
while max_replace < n and s[max_replace] == '9':
max_replace += 1
if s[min_replace] == '1':
min_replace += 1
while min_replace > 0 and min_replace < n and (s[min_replace] == '0' or s[min_replace] == s[0]):
min_replace += 1
if max_replace < n:
s = s.replace(s[max_replace], '9')
if min_replace < n and t[min_replace] == t[0]:
t = t.replace(t[min_replace], '1')
elif min_replace < n:
t = t.replace(t[min_replace], '0')
return int(s) - int(t)