2566-替换一个数字后的最大差值

Raphael Liu Lv10

给你一个整数 num 。你知道 Danny Mittal 会偷偷将 09 中的一个数字 替换 成另一个数字。

请你返回将 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 转成字符串 s,从左到右找第一个不是 9 的字符,把这个字符都替换成 9,得到最大数。

同理找第一个不是 0 的字符,替换成 0 得到最小数,由于 s[0] 一定不是 0,所以替换它就行。

附:视频讲解

[sol1-Python3]
1
2
3
4
5
6
7
8
9
class Solution:
def minMaxDifference(self, num: int) -> int:
mx = num
s = str(num)
for c in s:
if c != '9':
mx = int(s.replace(c, '9'))
break
return mx - int(s.replace(s[0], '0'))
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
12
func minMaxDifference(num int) int {
mx := num
s := strconv.Itoa(num)
for _, c := range s {
if c != '9' {
mx, _ = strconv.Atoi(strings.ReplaceAll(s, string(c), "9"))
break
}
}
mn, _ := strconv.Atoi(strings.ReplaceAll(s, s[:1], "0"))
return mx - mn
}

复杂度分析

  • 时间复杂度:O(\log \textit{num})。
  • 空间复杂度:O(\log \textit{num})。
 Comments
On this page
2566-替换一个数字后的最大差值