剑指 Offer 65. 不用加减乘除做加法

发布时间 2023-04-17 16:56:24作者: lxy_cn

题目链接:剑指 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)\)