- 思路:先通过异或运算得到不进位加法的值,再通过位与运算后左移一位的结果得到进位的值,最后相加,这个相加的过程相当于重复上面两步,直到进位为 0 停止。
- 时间复杂度:O(k),k 不会超过整数的最大位数
- 空间复杂度:O(1)
class Solution {
public:
int add(int num1, int num2){
while (num2) {
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}
return num1;
}
};