题目描述
- 讲道理,感觉算有点难度的题目了= =,还是需要时不时看看。
思路 & 代码
- 正负数情况可以不考虑(补码)
- 核心:加法 = 进位和 + 非进位和
- 关于位运算符的选择,leetcode 题解区中 Krahets 大佬的图写很好⬇️
class Solution {
// 用递归来做,会很好理解~
// 加法 = 进位和 + 非进位和
// 进位和 = & << ,非进位和 = ^
// 负数考虑:没关系,补码优势在于正负数不需要特殊考虑
public int add(int a, int b) {
// 进位和为0时,结束
if(b == 0){
return a;
}
// (非进位和,进位和)
return add(a ^ b, (a & b) << 1);
}
}
- 无注释版
class Solution {
public int add(int a, int b) {
if(b == 0){
return a;
}
return add(a ^ b, (a & b) << 1);
}
}
二刷
- 核心:递归 + 位运算
- 思路:记录结果表,推出结论
class Solution {
public int add(int a, int b) {
if(b == 0) {
return a;
}
return add(a ^ b, (a & b) << 1);
}
}