Problem Statement

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Reverse Integer - LeetCode

Approach

  1. Take the last digit of the number and append it to the answer until the number becomes 0.
  2. Before append, check if the answer can accommodate the new digit. If not, return 0.

Solution in Swift

class Solution {
    func reverse(_ x: Int) -> Int {
        var number = x
        var answer = 0
        let max = Int(Int32.max / 10)
        let min = Int(Int32.min / 10)

        while number != 0 {
            if answer > max || answer < min {
                return 0
            }

            answer = answer * 10 + (number % 10)
            number = number / 10
        }

        return answer
    }
}

Complexity

  • Time Complexity: \(O(\log n)\).

    \(\log_{10} n\) = number of digits in \(n\).

  • Space Complexity: \(O(1)\)