之和 Java實現(xiàn))
LeetCode 371. 兩整數(shù)之和題意不使用運算符 和 -計算兩個整數(shù) a、b 之和。思路位運算模擬加法加法的兩個部分無進(jìn)位相加a ^ b異或相同為 0不同為 1進(jìn)位(a b) 1與運算后左移一位不斷將「無進(jìn)位和」與「進(jìn)位」相加直到進(jìn)位為 0。Java 的 int 是 32 位補碼溢出會自動截斷因此負(fù)數(shù)同樣適用。Java 實現(xiàn)classSolution{publicintgetSum(inta,intb){while(b!0){intcarry(ab)1;// 計算進(jìn)位aa^b;// 無進(jìn)位相加bcarry;// 把進(jìn)位加到下一輪}returna;}}示例以 a 1, b 2 為例輪次 a b carry初始 1 2 -1 1 ^ 2 3 (1 2) 1 0 0b 0返回 3。以 a -1, b 1 為例循環(huán)若干輪后進(jìn)位也會變?yōu)?0最終返回 0。復(fù)雜度維度 復(fù)雜度時間 O(1)最多循環(huán) 32 次空間 O(1)遞歸寫法可選classSolution{publicintgetSum(inta,intb){if(b0)returna;returngetSum(a^b,(ab)1);}}注意點· 1 后可能溢出但 Java 的 int 會自動丟棄高位正好符合補碼加法。· 循環(huán)條件用 b ! 0不要寫成 b 0否則負(fù)數(shù)進(jìn)位會出錯。