leetcode007 Reverse Integer

題目

7. Reverse Integer
Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

第一次提交

第一次提交思路:

先除一些特殊情況,比如-9到9可以直接返回, Integer.MIN_VALUE這個數很特殊,這個值求絕對值還是它自身,原因爲它求絕對值會發生正溢出。然後排除末位的0,然後就利用字符串進行反轉,事實證明,這種做法把簡單的問題複雜化了。

第一次提交代碼:

public int reverse(int x)
{
    boolean flag = true;
    if(x == Integer.MIN_VALUE)
        return 0;
    if(x < -9)
    {
        flag = false;
        x = Math.abs(x);
    }
    else if(x < 10)
        return x;

    while(x%10==0)
        x /= 10;

    String s = String.valueOf(x);
    char[] s_char = s.toCharArray();

    StringBuilder stringBuilder = new StringBuilder();
    for(int i = s_char.length-1; i>=0; i--)
    {
        stringBuilder.append(s_char[i]);
    }

    long tmp = Long.parseLong(stringBuilder.toString());
    if(tmp > Integer.MAX_VALUE)
        x = 0;
    else
        x = (int)tmp;

    return flag?x:0-x;
}

第一次結果細節(圖):

image

第二次提交

第二次提交思路:

開始還是把特殊情況都排除掉。然後利用數學規律進行反轉,具體如代碼註釋。

第二次提交代碼:

public int reverse(int x)
{
    if(x > -10 && x < 10)  //一位數直接返回
        return x;
    if(x == Integer.MIN_VALUE) //特殊,這個值求絕對值還是它自身,原因爲它求絕對值會發生正溢出
        return 0;
    int flag = x > 0 ? 1 : -1; //記錄下符號

    x = Math.abs(x);

    long result = 0;

    while(x != 0)
    {
        int tmp = x % 10;
        result = result * 10 + tmp;  //反轉
        x /= 10;
    }
    return result > Integer.MAX_VALUE ? 0 : flag * (int) result;
}

第二次結果細節(圖):

image

總結

對於純數字的操作,看來還是用數字來效率更高。

發佈了44 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章