您的位置:首页 > 其它

leetcode[Sum of Two Integers]

2017-07-14 00:14 429 查看
解法一(递归):

public class Solution {
//计算两个数的和,又不让用+和-运算符
//根据加法的原理:相加,进位 从而进行处理
//因为不允许用+、-,所以根据位运算来表示相加和进位
public int getSum(int a, int b) {
if(b == 0){//递归出口,永远都不可能有进位
return a;
}
//根据位运算的总结,a^b可用来求每一位相加后剩下的结果
int temp = a ^ b;
//根据位运算的总结,(a&b)<<1可用来求每一位是否有进位
int carry = (a & b) << 1;//进位嘛,左移一位
return getSum(temp, carry);//将每一位相加后的结果加上进位,就是最终结果
}
}

解法二(非递归):
public class Solution {
int getSum(int a, int b) {

int sum = a;

while (b != 0)
{
sum = a ^ b;//calculate sum of a and b without thinking the carry
b = (a & b) << 1;//calculate the carry
a = sum;//add sum(without carry) and carry
}

return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: