371. 两整数之和

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

示例 1:

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

示例 2:

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

提示:

-1000 <= a, b <= 1000

因为不能使用加号和减号,故需要从计算机本身逻辑出发,即二进制;

// a b c sum c
// 0 0 0  0  0
// 0 0 1  1  0
// 0 1 0  1  0
// 0 1 1  0  1
// 1 0 0  1  0
// 1 0 1  0  1
// 1 1 0  0  1
// 1 1 1  1  1

可以得出以下结论:

  1. sum = a ^ b;
  2. c = a & b;

故思路可变成两个数异或,得到不进位的和,而后和与此前的进位相加,直到进位是0;

代码为:

class Solution {
    public int getSum(int a, int b) {
        int sum;
        while(b!=0){
            sum = a^b;
            b = (a&b)<<1;
            a = sum;
        }
        return a;
    }
}

我第一遍写上述思路时,由于不了解计算机内部的 二进制 逻辑,选择先java.lang.Integer.toBinaryString转换为二进制的字符串,此时的字符串为反码表示,如果是负数的话,再次截断。对于两个转变后的字符串,又没有办法用上述逻辑了,只能对应位逐个运算,很是麻烦。

后来,看了题解,原来如此。

悟了个大东西

posted @   啤酒加点醋  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示