about 2 years ago

兩數相加不使用+/-來達成,其實很簡單的,直接位元運算,但我們常常忘記位元運算這種東西,包括我也沒有做過這樣的運算。

這個程式碼是我目前覺得最好的答案,簡單又清楚,速度上也可以接受。

以下可以簡單解釋一下程式碼

public class Solution {
    public int getSum(int a, int b) {
        while(b!=0) {
            int c = a & b; 
            a = a ^ b; 
            b = c << 1; 
        }
        return a;
    }
}

其實就是很純粹的位元運算,下面用簡單的方式圖解一下。

假設a = 5, b = 2, answer = 7;

a = 0101
b = 0010

(1)
c = a & b = 1000
a = a ^ b = 0111
b = c << 1 = 0000
b = 0, 回傳a, 答案為(0111)

這是很簡單的解法,利用位移讓我們達到相加的道理,然後計算基本上就是使用0與1,其實這才是真正的加法!

← [MySQL] 簡單InnerJoin多個表並創造View [LeetCode] Ugly Number →
 
comments powered by Disqus