//方法一,递归版
//Time::O(n),Space:O(1)
class Solution
{
public:
int Add(int num1, int num2)
{
return num2==0?num1:Add(num1^num2,(num1&num2)<<1);
}
};
//方法二,迭代版
//Space::O(1),Time::O(n)
//这种位运算的方法就是,数字电路实现加法的具体实现。
//考察你有没有计算机底层知识以及思维
class Solution
{
public:
int Add(int num1, int num2)
{
while(num2!=0)
{
int sum=num1^num2;
int carry=(num1&num2)<<1;
num1=sum;
num2=carry;
}
return num1;
}
};
//方法三,用内嵌汇编的方法来具体实现,以下代码在gcc编译期下实现
class Solution {
public:
int getSum(int a, int b)
{
int ret=0;
asm volatile
(
"movl %%eax,%%ecx\n"
"addl %%ebx,%%ecx\n"
:"=c"(ret)
:"a"(a),"b"(b)
);
return ret;
}
};