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
可以得出以下结论:
- sum = a ^ b;
- 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
转换为二进制的字符串,此时的字符串为反码表示,如果是负数的话,再次截断。对于两个转变后的字符串,又没有办法用上述逻辑了,只能对应位逐个运算,很是麻烦。
后来,看了题解,原来如此。
悟了个大东西
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理