1432.改变一个整数能得到的最大差值

目标

给你一个整数 num 。你可以对它进行以下步骤共计 两次:

  • 选择一个数字 x (0 <= x <= 9).
  • 选择另一个数字 y (0 <= y <= 9) 。数字 y 可以等于 x 。
  • 将 num 中所有出现 x 的数位都用 y 替换。

令两次对 num 的操作得到的结果分别为 a 和 b 。

请你返回 a 和 b 的 最大差值 。

注意,新的整数(a 或 b)必须不能 含有前导 0,并且 非 0。

示例 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

示例 3:

  • 输入:num = 123456
  • 输出:820000

示例 4:

  • 输入:num = 10000
  • 输出:80000

示例 5:

  • 输入:num = 9288
  • 输出:8700

说明:

  • 1 <= num <= 10^8

思路

num 中选择一个数字 d,可以将 num 中所有的 d 都替换成另一个数字(不允许包含前导零),返回能够得到的最大值与最小值的差。

2566.替换一个数字后的最大差值 的区别是不能有前导零。

最大值:找到第一个不是 9 的位置,将 num 中所有与之相同的数字替换为 9

最小值:找到第一个不是 1 的位置,如果是首位,将 num 中所有与之相同的数字替换为 1,否则替换为 0

代码


/**
 * @date 2025-06-15 18:15
 */
public class MaxDiff1432 {

    public int maxDiff(int num) {
        int a = num, b = num;
        String s = String.valueOf(num);
        int n = s.length();
        int m = (int) Math.pow(10, n - 1);
        int ar = '-', br = '-';
        boolean first = false;
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (ar == '-' && c != '9') {
                ar = c;
            }
            if (br == '-' && c > '1') {
                br = c;
                first = i == 0;
            }
            if (ar == c) {
                a += (9 - (c - '0')) * m;
            }
            if (br == c) {
                b -= ((c - '0') - (first ? 1 : 0)) * m;
            }
            m /= 10;
        }
        return a - b;
    }
}

性能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注