[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;
}
};
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)