[LeetCode]1432. 改变一个整数能得到的最大差值 原创

算法标签

题目简叙

在这里插入图片描述

思路

很久以前写的,感觉当时写到后面都不知道自己在写啥…
传说中的靠直觉。。。

代码

class Solution {
public:
    int maxDiff(int num) {
    vector<int> tn,a,b;
    while(num>0){tn.push_back(num%10);num/=10;}//读入为vec
    reverse(tn.begin(),tn.end());//转为正序

    for(auto op:tn)a.push_back(op);//读入到a
    for(auto op:tn)b.push_back(op);//读入到b
        
    int tmpk=0;
    int cnta=1,cntb=1;
    for(int i=0;i<a.size();i++)//尽量把前导数字换成9
    {
        if(a[i]!=9&&cnta)
        {
        tmpk=a[i];
        a[i]=9;
        cnta--;
        }
        
        if(a[i]==tmpk)a[i]=9;//替换所有与被更换数字相同的数字
    }
        
    int w1=0,w2=0;
    for(int i=0;i<b.size();i++)
    {
                
        if(b[i]!=0&&cntb&&i!=0&&b[i]!=1)//尽量把前导数字换成0,但不能是第一个数字,同时也不能是第一个数字为1时的中间数字为1的情况
        {
        tmpk=b[i];
        b[i]=0;
        cntb--;
        w2=2;
        }
        
        if(b[0]!=1&&cntb)//尽量把前导数字换成1
        {
        tmpk=b[i];
        b[i]=1;
        cntb--;
        w1=1;
        }
        
        if(w1&&b[i]==tmpk)b[i]=1;//两种情况只能选择一种,优先高位 即p*pow(10,N)时的p
        if(w2&&b[i]==tmpk)b[i]=0;
    }
    
        int ans=0;
        vector<int> t;
        int cnttt=0;
        for(int i=0;i<a.size();i++)t.push_back(a[i]-=b[i]),cnttt++;//将两列两两相对之差放入新数组
        
        int cnt=0;
        for(int i=t.size()-1;i;i--)cnt++;//计算后缀0的数量
        //for(auto op:t)cout<<op<<" ";

        for(int i=0;i<t.size();i++)ans+=pow(10,cnt--)*a[i];//计算数量并乘上后缀0
        
        return ans;
    }
};

AC记录

在这里插入图片描述

posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示