今天是我坚持写题解的第 53 天!

题目描述(Medium)
给你两个整数 a
和 b
,不使用 运算符 +
和 -
,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2
输出:3
示例 2:
输入:a = 2, b = 3
输出:5
提示:
-1000 <= a, b <= 1000
链接:https://leetcode-cn.com/problems/sum-of-two-integers
方法一、模拟加法
这道题我们能想到最简单的一种做法与模拟字符串加法一样,我们用二进制来模拟,这里要考虑进位的问题,思路比较简单。
请看代码:
class Solution {
public int getSum(int a, int b) {
int ans = 0;
// 存储进位
int carry = 0;
for (int i = 0; i < 32; i++) {
// 从低位到高位依次计算
int x = (a >> i) & 1;
int y = (b >> i) & 1;
if (x == 1 && y == 1) {
// 不管carry是啥,肯定有进位
ans |= carry << i;
carry = 1;
} else if (x == 1 || y == 1) {
// carry为1则有进位,carry为0则无进位,与现有的carry一致
ans |= (carry ^ 1) << i;
} else {
// 不管carry是啥,肯定没有进位
ans |= carry << i;
carry = 0;
}
}
return ans;
}
}复制
时间复杂度:O(C),C固定为32。 空间复杂度:O(1)。
运行结果:

方法二、迭代法
我们观察位运算中的 &
和 ^
:

^
运算,又称作无进位加法,通过 ^
运算我们可以得到在不考虑进位条件下的加法结果。
通过 &
运算,我们可以确定哪些位置是需要进位的,把这些位置左移一位,再与异或的结果求和就可以得到结果。
比如,上图中计算的结果(注意,&运算的结果左移一位):

但是我们又不能直接使用加法, 所以,我们可以通过不断迭代完成这个过程。
请看代码:
class Solution {
public int getSum(int a, int b) {
// 011011 011100 011010 010010 000010 100010
// 000111 000110 001000 010000 100000 000000
int carry;
while (b != 0) {
carry = (a & b) << 1;
a = a ^ b;
b = carry;
}
return a;
}
}复制
时间复杂度:O(C),C最多为32。 空间复杂度:O(1)。
运行结果:

最后
如果对你有帮助,请点个赞吧,谢谢^^
也可以关注我,每日分享题解,一起刷题,一起拿全家桶。
文章转载自彤哥来刷题啦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2393次阅读
2025-04-09 15:33:27
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1107次阅读
2025-04-27 16:53:22
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
794次阅读
2025-04-10 15:35:48
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
612次阅读
2025-04-30 15:24:06
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
552次阅读
2025-04-11 09:38:42
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
536次阅读
2025-04-10 12:32:35
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
521次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
484次阅读
2025-04-07 09:44:54
一页概览:Oracle GoldenGate
甲骨文云技术
440次阅读
2025-04-30 12:17:56
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
438次阅读
2025-04-17 17:02:24
热门文章
【每日一题】437. 路径总和 III:前缀和 & 图解 & 回溯!
2021-09-28 1253浏览
【每日一题】881. 救生艇:排序 & 贪心 & 双指针 & 代码优化,简单思路!
2021-09-01 959浏览
【每日一题】446. 等差数列划分 II - 子序列:一题两解:动态规划的两种不同思路,接近100%!
2021-09-01 864浏览
【每日一题】847. 访问所有节点的最短路径:BFS & 状态压缩 & 小白也能看懂的题解!
2021-09-01 721浏览
【每日一题】802. 找到最终的安全状态:一题两解:DFS & 拓扑排序,简单易懂!
2021-09-01 676浏览