文章目录
- 题目描述
- 思路 & 代码
- 二刷
题目描述
- 讲道理,感觉算有点难度的题目了= =,还是需要时不时看看。
思路 & 代码
- 正负数情况可以不考虑(补码)
- 核心:加法 = 进位和 + 非进位和
- 关于位运算符的选择,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);}
}