天天看點

[LeetCode]Reverse Integer題解

題目連結: 7. Reverse Integer 難度:Easy

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

Note:

The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

要點

本題考查的是整數相加的溢出處理,檢查溢出有這麼幾種辦法:

  • 兩個正數數相加得到負數,或者兩個負數相加得到正數,但某些編譯器溢出或優化的方式不一樣
  • 對于正數,如果最大整數減去一個數小于另一個數,或者對于負數,最小整數減去一個數大于另一個數,則溢出。這是用減法來避免加法的溢出。
  • 使用long來儲存可能溢出的結果,再與最大/最小整數相比較

Java

class Solution {
    public int reverse(int x) {
        int res = 0;
        while (x != 0) {
            if (Math.abs(res) > Integer.MAX_VALUE / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};
           
參考: [Leetcode] Reverse Integer 反轉整數