LeetCode筆記:7. Reverse Integer

問題:

Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321

大意:

反轉一個整型數的數字。
例1:x = 123, return 321
例2:x = -123, return -321

思路:

題目很簡潔,注意是有負數的。

我的方法比較直接,先轉成String,有負號就保留負號,然后一個從尾部往前取數字,從新字符串的頭部往后放,就反轉過來了。最后再轉成int型返回。

這里使用了StringBuffer來加快拼接字符串的速度,不過依然沒有別人的方法快。

注意題目很無聊的會傳超出int范圍的數字給你測試,明明參數寫明了是int型的還給超大數,那就只能做一個try-catch,如果是超大數轉換失敗,那就直接返回0。

代碼(Java):

public class Solution {
    public int reverse(int x) {
        String xStr = String.valueOf(x);
        String reverse = "";
        int start = 0;
        if (xStr.charAt(0) == '-') {
            reverse = "-";
            start = 1;
        }
        StringBuffer reverseBuffer = new StringBuffer(reverse);
        for (int i = xStr.length()-1; i >= start; i--) {
            reverseBuffer.append(xStr.charAt(i));
            reverse = reverse + xStr.charAt(i);
        }
        reverse = reverseBuffer.toString();
        try {
            return Integer.valueOf(reverse).intValue();
        } catch (NumberFormatException e) {
            return 0;
        }
    }
}

他山之石:

public class Solution {
    public int reverse(int x)
    {
        int result = 0;
    
        while (x != 0)
        {
            int tail = x % 10;
            int newResult = result * 10 + tail;
            if ((newResult - tail) / 10 != result)
            { return 0; }
            result = newResult;
            x = x / 10;
        }
    
        return result;
    }
}

這個做法是直接左數字計算,每次取余得到最末尾的數字,取出來之后原數字除以10,取出來的數字加到新數字末尾去,不過新數字要先乘以10,也就是所有數字提高一位。他中間有個判斷 (newResult - tail) / 10 != result ,其實也是為了防止超大數溢出,如果溢出了就返回0。

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,766評論 0 33
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,854評論 0 6
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 最近歡樂頌熱播,雖然擺脫不了偶像劇的套路,但其中反應的一些觀點和社會現象很值得深思! 看看歡樂頌在大街小巷的熱播程...
    噤兔兔閱讀 728評論 0 4
  • 1. 昨天夜里,我投稿到365訓練營,被審稿員拒稿并發了私信告知原因:天數寫錯,所以被拒,我馬上去修改了天數,并且...
    爬上屋頂看星星閱讀 761評論 15 49