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
- Próximo: 7-reverse-integer.
Estado
- Leído
- Implementado desde cero
- Resuelto en LeetCode