leetcode 371.Sum of Two Integers
题目
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example:
Given a = 1 and b = 2, return 3.
题目意思是:在不使用+和-运算的情况下,求两个整数的和。
解题思路
看到不能使用+和-,首先想到的应该就是位操作了。对于位操作来说,^和&是最常见的。我们先考虑一下这两个操作:
0^0=0,0^1=1,1^1=0(有进位) 可以看出异或做的是无进位的加法。
那怎么知道有没有进位呢?可以看到只有在两个bit都是1时,才有进位,而1&1=1(1&0=0)。
所以本题的思路如下:
1.按位做异或 a^b
2.计算是否有进位 (a&b)<<1 注意这里把结果左移一位,因为进位是加在高一位上的。
3.调用getSum再计算进位和无进位加法结果,即递归
AC代码如下
class Solution {
public:
int getSum(int a, int b) {
if(b==0) return a;
int sum=a^b;
int carry=(a & b)<<1;
return getSum(sum,carry);
}
};
总结
leetcode上easy难度,主要是熟悉位操作,算作积累吧。
在leetcode这道题的讨论区里面看到一篇特别好的位操作总结,分享一下。