方法:二进制运算
解题思路
- 对于两个数 \(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)\)。