LeetCode刷题 371. 两整数之和

2021-01-19  本文已影响0人  逍遥白亦

371. 两整数之和

题目

不使用运算符+ 和-,计算两整数a、b之和。

示例 1:

输入: a = 1, b = 2
输出: 3

示例 2:

输入: a = -2, b = 3
输出: 1

思路

从上面的表格就可以发现,低位 = a^b,进位 = a & b。这样的计算可能要持续多次,回想一下在十进制的计算中,如果进位一直大于0,就得往后面进行计算,在这里也是一

样,只要进位不是0,我们就得一直重复计算低位和进位的操作(需要在下一次计算之前要把进位向左移动一位,这样进位才能和更高位进行运算)。这个时候的a和b就是刚才计算的低位和进位,用简单的加法迭代的代码表示:

代码

class Solution {
public int getSum(int a, int b) {
    if (a==0) return b;
    if (b==0) return a;
    int lower;
    int carrier;
    while (true) {
        lower = a^b;    // 计算低位
        carrier = a&b;  // 计算进位
        if (carrier==0) break;
        a = lower;
        b = carrier<<1;
    }
    return lower;
    }
}
上一篇下一篇

猜你喜欢

热点阅读