1. 程式人生 > >LeetCode之Easy篇 ——(7)Reverse Integer

LeetCode之Easy篇 ——(7)Reverse Integer

environ 代碼 不能 調用 its while with 報錯 code

7、Reverse Integer

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.

思路:

  1、是否考慮正負號?

    通過調用java.lang.Math類中取絕對值的abs方法,四種情況:

static double abs(double a);//返回 double 值的絕對值。
static float abs(float a);//返回 float 值的絕對值。
static int abs(int a);//返回 int 值的絕對值。
static long abs(long a);//返回 long 值的絕對值。

  2、32位int型數據範圍?

    最小值:Integer.MIN_VALUE:-2147483648

    最大值:Integer.MAX_VALUE:2147483647

  3、代碼第6行為什麽只需跟214748364(記為num)比較?

    首先,只有當輸入值為十位數,末尾數字記為a(第一位必定是1或者2,因為輸入值也必須在最大值與最小值之間,否則報錯),res跟num才顯得有意義,盡管之前也一直在比較。

    為了方便敘述,下面的res都是指最後一次跟 num比較的情況。

    a為0時,res是8位數,肯定小於num。最後輸出9位數,肯定不會越界。

    a為1時,res是以1開頭的9位數,肯定小於num。最後輸出10位數,也不會越界。

    a為2時,res是以24開頭的9位數,肯定大於num,不必進行也不能進行下一次賦值,因為再加一位肯定超過範圍,而且也沒有跟num比較,return 0的機會了,因為此時x的值為0,直接跳出循環,return res,結果肯定報錯,因為超過最大值。

    a大於2時,res肯定大於num,直接return 0即可,理由同上。

  4、怎麽表示輸出值? 

    res = res * 10 + x % 10;完美解決了輸入值尾數為0的情況。

Java代碼如下:

import static java.lang.Math.abs;
class Solution {
    public int reverse(int x) {
        int res = 0;
        while(x != 0){
            if(abs(res) > Integer.MAX_VALUE / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
}

LeetCode之Easy篇 ——(7)Reverse Integer