LeetCode-java 371.两整数之和(简单)

题371:类型:位运算

  • 题目:不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。
    示例 1:
    输入: a = 1, b = 2
    输出: 3
    示例 2:
    输入: a = -2, b = 3
    输出: 1
  • 解题步骤
    1、相加各位的值,不算进位,二进制每位相加就相当于做异或操作,可称为二进制的无进位加法;
    2、计算进位值,相当于进行与操作,之后再向左移一位;
    3、重复上述两步:进位值为0,跳出循环,即a为最终的求和结果。
class Solution {
    public int getSum(int a, int b) {
        // 进位不为0时一直循环,因为后面进位给b赋值了,所以这里是b
        while(b != 0){
            // 异或操作,相当于二进制的加操作
            int temp = a ^ b; // 第二轮开始相当于temp ^ carry
            // 计算进位值
            int carry = (a & b) << 1;
            // 将进位值给b
            b = carry;
            // 和给a
            a = temp; 
        }
        return a; // a是最后进位为0时的和,即最终结果
    }
}
class Solution {
    // 递归的方法,思路与上相同
    public int getSum(int a, int b) {
        if(a != 0){
            int temp = a ^ b;
            int carry = (a&b)<<1;
            // 由形参顺序确定,a代表carry即进位,b代表temp即和
            return getSum(carry,temp);
        }
        return b;
    }
}

你可能感兴趣的:(LeetCode-java 371.两整数之和(简单))