The task involves inverting the digits of a standard 32-bit signed integer. For example, an input of 123 produces 321, while -789 yields -987. A critical requirement dictates that the function must return 0 if the reversed value exceeds the representabel range of a 32-bit signed integer (-2,147,483,648 to 2,147,483,647).
String-Based Inversion
Python’s string handling capabilities allow for a concise implementation. By isolating the sign, converting the absolute value to a string, and applying slice notation for reversal, the digits can be efficiently inverted. After reconstruction, the original sign is reapplied, and the result is validated against the numerical boundaries.
class DigitInverter:
def flip(self, source: int) -> int:
MAX_LIMIT = 2147483647
MIN_LIMIT = -2147483648
polarity = -1 if source < 0 else 1
inverted = int(str(abs(source))[::-1])
final_val = polarity * inverted
if final_val < MIN_LIMIT or final_val > MAX_LIMIT:
return 0
return final_val
Arithmetic Digit Extraction
A purely mathematical approach avoids string conversion overhead and aligns with traditional low-level integer processing. This technique iteratively isolates the least significant digit using the modulo operator and shifts the accumulated result left by multiplying by ten. Python’s arbitrary-precision integers safely handle intermediate calculations, allowing a straightforward boundary check after reconstruction.
class MathReverser:
def flip(self, input_num: int) -> int:
UPPER = 2**31 - 1
LOWER = -2**31
direction = -1 if input_num < 0 else 1
positive_magnitude = abs(input_num)
reversed_total = 0
while positive_magnitude > 0:
reversed_total = (reversed_total * 10) + (positive_magnitude % 10)
positive_magnitude //= 10
output = direction * reversed_total
if output < LOWER or output > UPPER:
return 0
return output
The arithmetic method processes digits through repeated division and modulo operations, reconstructing the number in reverse order. Both implementations correctly manage sign preservation and enforce the 32-bit overflow constraint, with the mathematical variant offering better cross-language portability and predictable memory usage.