題目描述
給出兩個(gè)整數(shù)a和b, 求他們的和, 但不能使用 + 等數(shù)學(xué)運(yùn)算符
思路
二進(jìn)制的數(shù)字用0、1表示淋硝,兩數(shù)相加即對(duì)應(yīng)位0雹熬、1相加,其結(jié)果無非還是0谣膳、1
存在兩種情況:進(jìn)位竿报、不進(jìn)位
不進(jìn)位
:考慮用異或。異或運(yùn)算又叫:不進(jìn)位相加
進(jìn)位
:進(jìn)位的bit位继谚,即兩數(shù)與的結(jié)果為1的位烈菌。進(jìn)位需要將兩數(shù)與的結(jié)果左移一位。
所以兩數(shù)求和花履,演變成異或的結(jié)果和與運(yùn)算移位后的結(jié)果繼續(xù)求和芽世,考慮遞歸
。
遞歸終止條件自然是與的結(jié)果為0
臭挽,那么最終結(jié)果就是異或的值捂襟。
代碼
class Solution {
public int aplusb(int a, int b) {
// write your code here, try to do it without arithmetic operators.
if(b == 0) {
return a;
}else {
return repeat(a, b);
}
}
private int repeat(int a, int b) {
int _a = a ^ b;
int _b = (a & b) << 1;
if(b != 0) {
return repeat(_a, _b);
}else {
return _a;
}
}
};
考差點(diǎn)
- 遞歸(遞歸的思想:參數(shù)不同,套路相同欢峰,終止條件葬荷,逐層返回)
- 位運(yùn)算(兩數(shù)異或:加法不進(jìn)位)