JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2025-05-06
目录

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

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给你一个整数 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

示例 3:

输入:num = 123456
输出:820000

示例 4:

输入:num = 10000
输出:80000

示例 5:

输入:num = 9288
输出:8700

提示:

  • 1 <= num <= 10^8

# 思路

Arrays.copyOf

# 解法


class Solution {
    public int maxDiff(int num) {
        //贪心找到两次操作后最大值和最小值,再相减即可
        char[] ch1 = Integer.toString(num).toCharArray(), ch2 = Arrays.copyOf(ch1, ch1.length);
        //forbid参数传入'@'是为了使得ch[i] != forbid恒成立
        func(ch1, 0, '@','9');
        if(ch2[0] == '1') func(ch2, 1, '1', '0');
        else func(ch2, 0, '@', '1');
        int max = Integer.parseInt(new String(ch1)), min = Integer.parseInt(new String(ch2));
        return max - min;
    }
    public void func(char[] ch, int startIdx, char forbid, char target)
    {
        for(int i = startIdx; i < ch.length; i++)
        {
            if(ch[i] != forbid && ch[i] != target)
            {
                char c = ch[i];
                for(int j = i; j < ch.length; j++)
                {
                    if(ch[j] == c)
                    {
                        ch[j] = target;
                    }
                }
                break;
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
#Java
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式