Leetcode 371 :Sum of Two Integers

題目描述:https://leetcode.com/problems/sum-of-two-integers/?tab=Description

題目分析:不用+、-來實現加法運算。那麼可以像計算機硬件一樣使用位運算來實現。

  • 二進制的加法有兩部分:相加,進位:
    • 各位相加的結果,是“異或:^”;各位的進位是“且:&”,因爲進位是放在下一位的,所以要左移一位
    • 所以,a+b = x1+c1。其中x1 = a ^ b,  c1 = (a & b) <<1
  • 但是在這種情況下,還是要使用加法。可以考慮遞歸地調用上述方法
    • 觀察c1,可以發下,c1的最後一位一定爲0。
    • a + b = x + c1 = x1 + c1 = x2 + c2,這裏C2的最後2位,也一定是0.以此類推,第n次遞歸,最後n位是0.
    • 最終一定會出現一個cn,全都是0。也就是沒有進位,所以,遞歸的出口,就是b==0
AC代碼:
public class Solution {
    public int getSum(int a, int b) {
        if(b==0){
            return a;
        }
        int result = a ^ b;
        int carray = (a & b) << 1;/
        return getSum(result, carray);
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章