今天刷了这道题看到一个神奇的解法,如下:
class Solution {
public:
int add(int a, int b) {
while(b != 0){
auto carry = (unsigned int)(a & b) << 1;
a ^= b;
b = carry;
}
return a;
}
};
作者:yizhe-shi
链接:https://leetcode-cn.com/problems/add-without-plus-lcci/solution/c-wei-yun-suan-jie-fa-by-yizhe-shi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
核心思路是:按照位运算符进行计算,
1+1=10,0+1=1,0+0=0,末尾的数字可以用&运算符得出
而进位位的话可以采用异或^运算符,相同为0,不同为1(只有都为1时才进位)。
于是carry中存储进位,将它左移一位后投入一下轮计算中。
不得不说这个解法太妙了。