[騰訊精選練習(xí)50題][1]LeetCode7

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

題目

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

示例 1:

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

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

輸入: 120
輸出: 21
注意:

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

注意點

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

我的寫法

class Solution {
    public int reverse(int x) {
        boolean negative = false;//用一個布爾值來標(biāo)記該數(shù)值是否為負(fù)數(shù)
        if(x < 0) {
            x = Math.abs(x);
            negative = true;
        }//如果是負(fù)數(shù)變成正數(shù)并進行標(biāo)記
        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)系作者
  • 序言:七十年代末忠售,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子迄沫,更是在濱河造成了極大的恐慌稻扬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羊瘩,死亡現(xiàn)場離奇詭異泰佳,居然都是意外死亡,警方通過查閱死者的電腦和手機尘吗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門逝她,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睬捶,你說我怎么就攤上這事黔宛。” “怎么了擒贸?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵臀晃,是天一觀的道長觉渴。 經(jīng)常有香客問我,道長积仗,這世上最難降的妖魔是什么疆拘? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮寂曹,結(jié)果婚禮上哎迄,老公的妹妹穿的比我還像新娘。我一直安慰自己隆圆,他們只是感情好漱挚,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渺氧,像睡著了一般旨涝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侣背,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天白华,我揣著相機與錄音,去河邊找鬼贩耐。 笑死弧腥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的潮太。 我是一名探鬼主播管搪,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铡买!你這毒婦竟也來了更鲁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤奇钞,失蹤者是張志新(化名)和其女友劉穎澡为,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體景埃,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡媒至,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纠亚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡筋夏,死狀恐怖蒂胞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情条篷,我是刑警寧澤骗随,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布蛤织,位于F島的核電站,受9級特大地震影響鸿染,放射性物質(zhì)發(fā)生泄漏指蚜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一涨椒、第九天 我趴在偏房一處隱蔽的房頂上張望摊鸡。 院中可真熱鬧,春花似錦蚕冬、人聲如沸免猾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猎提。三九已至,卻和暖如春旁蔼,著一層夾襖步出監(jiān)牢的瞬間锨苏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工棺聊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伞租,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓躺屁,卻偏偏與公主長得像肯夏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子犀暑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容