leetcode 2566. 替换一个数字后的最大差值 简单

给你一个整数 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 <= 10^8

分析:用一个数组存储 num 的每位数字。之后从高位向低位检查,将第一个不是 9 的数字都改成 9,得到最大值;将第一个不是 0 的数字改为 0,得到最小值。最后相减得到答案。

cpp 复制代码
int minMaxDifference(int num) {
    int cnt[10]={0},cnt_max=0,cnt_min=0;
    int temp=num,t=0;
    while(temp)
        cnt[t++]=temp%10,temp/=10;
    int ind_max=-1,ind_min=-1;
    for(int i=t-1;i>=0;--i)
    {
        if(cnt[i]!=9&&ind_max==-1)ind_max=cnt[i];
        if(cnt[i]!=0&&ind_min==-1)ind_min=cnt[i];

        if(cnt[i]==ind_max)cnt_max=cnt_max*10+9;
        else cnt_max=cnt_max*10+cnt[i];

        if(cnt[i]==ind_min)cnt_min=cnt_min*10+0;
        else cnt_min=cnt_min*10+cnt[i];
    }

    return cnt_max-cnt_min;
    
}
相关推荐
alphaTao10 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习10 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
不知名XL10 小时前
day50 单调栈
数据结构·算法·leetcode
@––––––10 小时前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
YuTaoShao12 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
TracyCoder12313 小时前
LeetCode Hot100(26/100)——24. 两两交换链表中的节点
leetcode·链表
望舒51314 小时前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
铉铉这波能秀15 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
参.商.15 小时前
【Day 27】121.买卖股票的最佳时机 122.买卖股票的最佳时机II
leetcode·golang
铉铉这波能秀15 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple