剑指 Offer 65. 不用加减乘除做加法
方法:二进制运算
解题思路
- 对于两个数 \(a\) 和 \(b\),其无进位的二进制位的和为
no_c = a ^ b,有进位的二进制位的和为c = a & b << 1;有a + b = no_c + c; - 但是由于不能使用加法,那么继续对
no_c + c进行同样的转换,直到c = 0,此时返回no_c即可。
代码
class Solution {
public:
int add(int a, int b) {
while (b != 0) {
int no_c = a ^ b;
int c = (unsigned int)(a & b) << 1;
a = no_c;
b = c;
}
return a;
}
};
复杂度分析
时间复杂度:\(O(1)\),因为最多只有 \(32\) 位;
空间复杂度:\(O(1)\)。

浙公网安备 33010602011771号