LeetCode_位运算_简单_371. 两整数之和

x33g5p2x  于2022-06-16 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(249)

1.题目

给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和。

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

示例 2:
输入:a = 2, b = 3
输出:5

提示:
-1000 <= a, b <= 1000

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-of-two-integers

2.思路

(1)位运算_递归

(2)位运算_非递归

3.代码实现(Java)

//思路1————位运算_递归
class Solution {
    public int getSum(int a, int b) {
        if (b == 0) {
            return a;
        }
        /*
            ^:异或运算,运算规则为相异为 1,相同为 0
            a ^ b 计算它们的二进制表示时不同时为 1 的位之和
        */
        int sum = a ^ b;
        /*
            &:与运算,运算规则为
            a & b:把 a 和 b 中同为 1 的两位相加,那么既然两位同为 1,也就代表在 2 进制中要发生进位,
                  处理进位时可以将结果左移一位即可,右边刚好补 0
        */
        int carry = (a & b) << 1;
        //递归计算 sum 与 carry 的和,直到 carry 为 0 时退出递归求和
        return getSum(sum, carry);
    }
}
//思路2————位运算_非递归
class Solution {
    public int getSum(int a, int b) {
        while (b != 0) {
            int carry = (a & b) << 1;
            a = a ^ b;
            b = carry;
        }
        return a;
    }
}

相关文章