[騰訊精選練習50題][1]LeetCode7

7.整數(shù)反轉(zhuǎn)

題目

給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進行反轉(zhuǎn)。

示例 1:

輸入: 123
輸出: 321
示例 2:

輸入: -123
輸出: -321
示例 3:

輸入: 120
輸出: 21
注意:

假設我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231 , 231 ? 1]。請根據(jù)這個假設,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。

注意點

  • 數(shù)字的翻轉(zhuǎn)并不難,比較容易出錯的是怎樣才能保證翻轉(zhuǎn)后的數(shù)組不能夠溢出。

我的寫法

class Solution {
    public int reverse(int x) {
        boolean negative = false;//用一個布爾值來標記該數(shù)值是否為負數(shù)
        if(x < 0) {
            x = Math.abs(x);
            negative = true;
        }//如果是負數(shù)變成正數(shù)并進行標記
        StringBuilder sb = new StringBuilder();
        while(x > 0) {
            sb.append(x % 10);
            x /= 10;
        }
        long result = 0;
        String sresult = sb.toString();
        for(int i = 0; i < sresult.length(); i++) {
            result = result * 10 + sresult.charAt(i) - '0';
        }//整數(shù)的翻轉(zhuǎn),為了不溢出,用long類型來進行存儲
        if(negative) {
            result = - result;
            return result < Integer.MIN_VALUE ? 0 : (int)result;
        }else {
            return result > Integer.MAX_VALUE ? 0 : (int)result;
        }//返回前判斷是否溢出
    }
}

官方題解

思路

  • 翻轉(zhuǎn)數(shù)字的思路其實就是每次通過取余操作,獲得最低位,然后再把最低位*10變成我們需要的高位
  • 邏輯如下:
//pop operation:
pop = x % 10;
x /= 10;

//push operation:
temp = rev * 10 + pop;
rev = temp;
  • 那如何避免溢出這種情況呢?題目中要求如果溢出則返回0,官方提供的思路是,每次操作時,都要檢查下一次得到的rev是否會溢出。
  • 檢查的思路如下所示:
    檢查是否溢出

    為什么pop>7就會溢出呢,是因為INTMAX的值是2147483647
    而(INTMAX/10)10=2147483640,所以如果pop>7,則超過了INTMAX這時候就會發(fā)生溢出。
    同理,(INTMIN/10)
    10=-2147483640,如果pop<-8,則會發(fā)生溢出。

代碼

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while(x != 0) {
            int pop = x%10;
            x/=10;
            if(rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7)) return 0;
            if(rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容