Java實(shí)現(xiàn)每日一道算法面試題(8):leecode7 整數(shù)反轉(zhuǎn)

1.算法題目

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

示例 1:

輸入: 123
輸出: 321

示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

注意:

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

2.算法思路

算法總思路是彈出末位和推入數(shù)字 & 溢出前進(jìn)行檢查,具體步驟:

  1. 依次構(gòu)建反轉(zhuǎn)整數(shù)的一位數(shù)字;
  2. 檢查當(dāng)前反轉(zhuǎn)得到的數(shù)字再增加一位數(shù)字后是否會(huì)越界,為什么要在變換前進(jìn)行越界檢查呢?因?yàn)槿绻崔D(zhuǎn)后的數(shù)字越界越界了,再去判斷的時(shí)候數(shù)字已經(jīng)被截取了,判斷結(jié)果不準(zhǔn)確了;越界判斷依據(jù)以正數(shù)為例:若 temp = vev * 10 + pop > Integer.MAX_VALUE 溢出了,則一定有 rev >= (Integer.MAX_VALUE / 10),若 rev > (Integer.MAX_VALUE / 10),則 temp = vev * 10 + pop 一定會(huì)溢出;若 rev == (Integer.MAX_VALUE / 10),只要 pop > 7,則 temp = vev * 10 + pop 會(huì)溢出;負(fù)數(shù)的判斷依據(jù)也可以依次類推;
  3. 推入數(shù)字的時(shí)候借助數(shù)學(xué)方法做變換 rev = rev * 10 + pop。

3.算法代碼

依據(jù)算法思路用Java語(yǔ)言編寫(xiě)的具體算法代碼如下:

    /**
     * 要考慮反轉(zhuǎn)后整數(shù)溢出情況:溢出后返回0
     * @param x
     * @return
     */
    public static int reverse(int x) {
        int res = 0;
        int maxOneTenth = Integer.MAX_VALUE / 10;
        int minOneTenth = Integer.MIN_VALUE / 10;
        while (x != 0) {
            int pop = x % 10;
            x = x / 10;
            if (res > maxOneTenth || (res == maxOneTenth && pop > 7)) {
                return 0;
            }
            if (res < minOneTenth || (res == minOneTenth && pop < -8)) {
                return 0;
            }
            res = res * 10 + pop;
        }
        return res;
    }

4.總結(jié)

這個(gè)算法題重點(diǎn)是要掌握對(duì)反轉(zhuǎn)后數(shù)據(jù)的越界檢查時(shí)機(jī)和判斷方法。

??如果你有疑問(wèn)或更好的算法思路,歡迎留言交流!?。?/strong>
??如果感覺(jué)我的文章對(duì)您有所幫助,麻煩動(dòng)動(dòng)小手給個(gè)喜歡,謝謝?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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