兩整數之和 LeetCode371

2021-10-16 22:48:55 字數 1077 閱讀 7364

不使用運算子 + 和 - ​​​​​​​,計算兩整數 ​​​​​​​a 、b ​​​​​​​之和。
兩個整數a, b; a ^ b是無進製的相加; a&b得到每一位的進製;讓無進製相加的結果與進製不斷的異或, 直到進製為0;

getsum(a, b) 

return sum;

}

官方題解:

題目說不能使用運算子 + 和 -,那麼我們就要使用其他方式來替代這兩個運算子的功能。

位運算中的加法

我們先來觀察下位運算中的兩數加法,其實來來回回就只有下面這四種:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 0(進製 1)

仔細一看,這可不就是相同位為 0,不同位為 1 的異或運算結果嘛~

異或和與運算操作

我們知道,在位運算操作中,異或的乙個重要特性是無進製加法。我們來看乙個例子:

a = 5 = 0101

b = 4 = 0100

a ^ b 如下:

0 1 0 1

0 1 0 0

-------

0 0 0 1

a ^ b 得到了乙個無進製加法結果,如果要得到 a + b 的最終值,我們還要找到進製的數,把這二者相加。在位運算中,我們可以使用與操作獲得進製:

a = 5 = 0101

b = 4 = 0100

a & b 如下:

0 1 0 1

0 1 0 0

-------

0 1 0 0

由計算結果可見,0100 並不是我們想要的進製,1 + 1 所獲得的進製應該要放置在它的更高位,即左側位上,因此我們還要把 0100 左移一位,才是我們所要的進製結果。

那麼問題就容易了,總結一下:

a + b 的問題拆分為 (a 和 b 的無進製結果) + (a 和 b 的進製結果)

無進製加法使用異或運算計算得出

進製結果使用與運算和移位運算計算得出

迴圈此過程,直到進製為 0

LeetCode 37 解數獨 困難

編寫乙個程式,通過填充空格來解決數獨問題。乙個數獨的解法需遵循如下規則 以下內容來自37.解數獨 回溯搜尋演算法 詳解 回溯三部曲 遞迴函式以及引數 遞迴函式的返回值需要是bool型別,為什麼呢?因為解數獨找到乙個符合的條件 就在樹的葉子節點上 立刻就返回,相當於找從根節點到葉子節點一條唯一路徑,所...

leetcode 兩整數之和

不使用運算子 和 計算兩整數 a b 之和。示例 1 輸入 a 1,b 2 輸出 3 示例 2 輸入 a 2,b 3 輸出 1 通過觀察異或運算的真值表,與加法的真值表特別地像。需要注意的是異或只看本位,加法可能需要進製。從而用到與運算 1 0 1 1 1 1 0 1 0 0 0 0 與運算可以很好...

leetcode 37 解數獨 深搜

編寫乙個程式,通過已填充的空格來解決數獨問題。乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。空白格用 表示。public class 37 for int i 0 i 9 i fo...