如何仅替换单个数字位求解两个整数的最大和(含负数场景)
单数位替换求两数最大和问题
问题定义
给定两个整数,仅允许执行以下操作:从两个数里选其中一个,替换它的任意单个数字位(不能新增、删减数字的总位数),计算完成操作后两数能拿到的最大可能和。
约束规则
- 输入的两个整数可以为负数
- 全程仅能修改1个数的1位数字,不允许调整数字总长度
参考示例
示例1 输入:a=1,b=90 最优解:把b的个位0替换为9得到99,最终和为1+99=100
示例2 输入:a=23,b=45 最优解:把a的十位2替换为9得到93,最终和为93+45=138
解题逻辑
核心思路非常直接,因为只能改一个数的某一位,只需要遍历所有可能的修改方向取最大值就行:
- 先计算「修改a的任意一位时,a能取到的最大值maxA」,此时的和为
maxA + 原b值 - 再计算「修改b的任意一位时,b能取到的最大值maxB」,此时的和为
原a值 + maxB - 取上面两个和的较大值,就是最终答案
单个数单改一位取最大值的实现细节
很多人容易在负数处理上踩坑,这里分两种情况明确规则:
- 处理正数:从数字的最高位开始从左往右找,遇到第一个不是9的数位,直接替换成9。越早替换权重越高的数位,拿到的数值越大。如果整个数已经全是9,那不管改哪一位数值都不会变,直接取原值即可。
- 处理负数:数字本身带负号,要让数值尽可能变大(也就是离0更近)。操作时忽略负号从数字部分的最高位开始从左往右找,遇到第一个不是0的数位,直接替换成0。如果数字部分已经全是0(也就是数本身是0),那不管改哪一位数值都不会变,直接取原值即可。
举个负数场景的验证例子:如果a=-5,b=3,那么改a的话把5改成0得到0,和为0+3=3;改b的话把3改成9得到9,和为-5+9=4,最终取较大的4就是正确答案。
内容的提问来源于stack exchange,提问作者Vishnu Teja
相关产品推荐
相关产品推荐

