1. 程式人生 > >LeetCode --Reverse Integer

LeetCode --Reverse Integer

題目

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.

分析

這個要注意幾點:
1.對負數如何處理?
2.如果是100等反轉過來為多少呢?
3.反轉的數溢位瞭如何處理?怎麼判斷溢位?

解答

1.負數先處理為正數,然後輸出時再處理成負數即可
2.100反轉過來當成1
3.溢位是最困難的,例如,一個很大的數,他溢位就會發生截斷效應,讓程式無法判斷這是否溢位。例如,8Bit,最大是255,那麼一個數是 245,反轉為542,發生溢位,結果變成了542%255,那麼怎麼判斷?這個問題,之前困擾了我很久,解決辦法是,用一個比8bit大的型別數去存下這個542,再拿去和255比較。那麼在這個題目中,是32bit的int型別,那麼我們用8位元組的long型別去儲存,再去判斷溢位,在返回的時候,再將long截斷為int型別即可。

程式碼(java版本)

public class Solution 
{
    public int reverse(int x) 
    {

        //處理負數,j將其變為正數,再用flag標記一下
        int flag = 0;
        if(x < 0)
        {
            x = -x;
            flag = -1;
        }

        //演算法核心部分,用一個long型別的ret去解決判斷溢位問題
        long ret = 0;
        while(x != 0)
        {
            ret = ret * 10
+ x % 10; x /= 10; } //判斷是否溢位 if(ret > Integer.MAX_VALUE || ret < Integer.MIN_VALUE) { ret = 0; } //處理負數 if(flag == -1) { ret = -ret; } return (int)ret; } }