Reverse Integer

Problem

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output:  321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:

Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

Related Topics:

Math

Analysis

重点在于溢出处理,可以参考 Integer.parseInt() 方法,核心思想是:

  • 统一采用负数来处理。
  • 提前缩小区间范围,避免溢出。

Code

class Solution {

    fun reverse(x: Int): Int {

        var xi = x
        var result = 0
        var negative = false
        var limit = -Int.MAX_VALUE
        val multmin: Int
        var digit: Int

        if (xi < 0) {
            negative = true
            limit = Int.MIN_VALUE
        }

        multmin = limit / 10
        while (xi != 0) {

            digit = if (negative) -(xi % 10) else xi % 10
            xi /= 10

            if (result < multmin) {
                return 0
            }
            result *= 10

            if (result < limit + digit) {
                return 0
            }
            result -= digit
        }

        return if (negative) result else -result
    }
}

results matching ""

    No results matching ""