[LintCode] Reverse Integer

Problem

Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-bit integer).git

Example

Given x = 123, return 321code

Given x = -123, return -321it

Note

這道題有一些細節須要留意。新數res會不會溢出?符號位如何處理?
用慣用的作法,n除以10取餘,獲得最低位cur,放進res。每次循環res乘以10累加當前最低位cur,同時n除以10不斷減少。
要點在於考慮res乘10累加運算的狀況,用分支語句判斷髮生溢出的條件。不能直接寫if (res * 10 + cur > Integer.MAX_VALUE),由於res * 10就有可能會溢出了;而要用(Integer.MAX_VALUE - cur) / 10,由於只有減法和除法,結果不可能溢出。
最後的結果要加上以前排除的符號位。io

Solution

public class Solution {
    public int reverseInteger(int n) {
        boolean isNeg = n < 0;
        n = isNeg ? -n : n;
        int res = 0;
        while (n != 0) {
            int cur = n % 10;
            if (res >= (Integer.MAX_VALUE - cur) / 10) return 0;
            res = res * 10 + cur;
            n /= 10;
        }
        return isNeg ? -res : res;
    }
}
相關文章
相關標籤/搜索