首頁 > 後端開發 > Python教學 > 兩個整數的和 - leetcode - Python

兩個整數的和 - leetcode - Python

Linda Hamilton
發布: 2025-01-22 16:11:11
原創
560 人瀏覽過

讓我們開始討論不使用 ' ' 運算子將兩個整數相加的核心。 這需要二進位操作。

SUM OF TWO INTEGERS - leetcode - Python

我們將像常規加法一樣處理此問題,但使用二進位。

SUM OF TWO INTEGERS - leetcode - Python

  1. 從右邊開始加入,就像平常一樣:1 1, 0 1, 1 0, 0 0。
  2. 由於我們使用的是二進制,如果和達到 2,則將其重置為 0(1 1 = 10 二進制,帶進位後變為 0)。
  3. 對所有位元重複此操作。這給了我們部分總和,暫時忽略進位。

SUM OF TWO INTEGERS - leetcode - Python

XOR (^) 位元運算子完美地處理了這個初始和:

  • 如果位元相同,結果為 0。如果不同,結果為 1。

這符合我們的需求:1 1 → 0(帶進位)、0 1 或 1 0 → 1 和 0 0 → 0。

現在,讓我們來談談帶原者。 AND (&) 運算子幫助我們找到它們:

  • 如果兩位都是 1,則結果為 1(進位)。

要將進位左移,我們將使用左移位。

SUM OF TWO INTEGERS - leetcode - Python

演算法:

  1. 初始化:
    • sum = a ^ b(無進位求和的異或)
    • carry = (a & b)(並且用於攜帶)
  2. 迭代:
    • 重複直到carry == 0:
      • a = sum
      • b = carry << 1(進位左移)

範例(5 3):

  1. 初始值: SUM OF TWO INTEGERS - leetcode - Python
  2. 迭代 1:
    • sum = 0101 ^ 0011 = 0110
    • carry = 0101 & 0011 = 0001 SUM OF TWO INTEGERS - leetcode - Python
  3. 迭代 2:
    • sum = 0110 ^ 0010 = 0100
    • carry = 0110 & 0010 = 0010 SUM OF TWO INTEGERS - leetcode - Python
  4. 迭代 3:
    • sum = 0100 ^ 00100 = 0000
    • carry = 0100 & 0100 = 0100 SUM OF TWO INTEGERS - leetcode - Python
  5. 迭代 4:
    • sum = 0000 ^ 1000 = 1000
    • carry = 0000 & 1000 = 0000

進位為 0,所以最終的和是 1000 (8)。

SUM OF TWO INTEGERS - leetcode - Python

Python 的無界整數會導致負數問題。 左移可以導致無限增長。 為了解決這個問題,我們需要模擬固定大小的整數(例如 32 位元)。

SUM OF TWO INTEGERS - leetcode - Python

我們將使用 32 位元遮罩 (0xFFFFFFFF) 來限制位數:

SUM OF TWO INTEGERS - leetcode - Python

這可確保僅考慮最後 32 位,從而防止無限增長。 如有必要,我們也會透過將其轉換為 32 位元二進位補碼表示來處理潛在的負面結果。

SUM OF TWO INTEGERS - leetcode - Python

這種方法有效地模擬了Python中的32位元整數運算,解決了無界整數和負數的問題。 if a > MAX_INT 條件確保結果保持在 32 位元有符號整數範圍內。 -12 和 -8 的範例示範了此校正如何產生 -20 的預期結果。

我的名字是 Jaimin Bariya,如果您發現有用的東西,請按讚和評論,並在 github jaimin-bariya 上關注我

以上是兩個整數的和 - leetcode - Python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板