LeetCode 371 — Sum of Two Integers

Sexto problema de Bit Manipulation. Sumar sin usar + ni -. Half-adder de hardware: XOR para suma sin carry, AND+shift para carry.

Enunciado

Suma a + b sin usar operadores aritméticos. Familiar para perfil HW: es exactamente cómo lo hace una ALU.


Solución — Half-adder iterativo

class Solution:
    def getSum(self, a, b):
        mask = 0xFFFFFFFF
        while b & mask:
            carry = ((a & b) << 1) & mask
            a = (a ^ b) & mask
            b = carry
        return a if a <= 0x7FFFFFFF else ~(a ^ mask)

Análisis: O(1) (32 bits máximo).

Lógica

  • a ^ b: suma sin carry.
  • (a & b) << 1: el carry desplazado.
  • Repetir hasta que carry sea 0.

mask y la negación final son por el manejo de negativos en Python (que tiene ints arbitrarios, no 32-bit).


Conexiones

Estado

  • Leído
  • Implementado desde cero
  • Resuelto en LeetCode