LeetCode從零刷起 (7. Reverse Integer)

LeetCode(7. Reverse Integer)

Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!
If the integer's last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?
For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
**Note:
**The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

知識點:

  1. 這道題考察了關于C++ int類型的范圍以及存儲方式。這就要了解數(shù)字是如何在計算機存儲的了掉弛,這涉及到原碼鳞贷,反碼和補碼的知識的畴。關于這方面的內容擎勘,我推薦一篇講得非常清楚的博客:C++原碼成箫,反碼醉顽,補碼詳解
    不過在實際使用中并齐,我們只需要知道C++ int 的范圍位于-232 --- 232-1妖泄, 且我們可以用INT_MAX表示int的最大值村怪,用INT_MIN表示int的最小值。
  2. 關于一個數(shù)值是否越界的判斷:這里我用到了這樣一個小tip浮庐,即如果有可能 a + b > INT_MAX的話甚负,為了防止越界造成的麻煩,我們用 a > INT_MAX - b 來判斷审残。其他的運算同理(比如乘法轉除法)梭域。這樣的等價判斷避免了越界帶來的麻煩。

解題思路:

這里要注意先判斷x是否為INT_MIN搅轿,如果是的話病涨,直接返回0,因為INT_MIN的反向數(shù)值是越界的璧坟;如果不是的話既穆,這樣我們就可以把x取絕對值而不用擔心取絕對值后x的越界問題赎懦,便于我們對數(shù)字進行處理。
接下來就是對原來的數(shù)字一位一位的取反了幻工,要注意的是在進行到最后一位的時候励两,要進行越界判斷了。此時只要用到我們上面講到的小tip就可以了囊颅。
最后的返回值別忘了正負號就好了当悔。
C++代碼如下:

class Solution {
public:
    int reverse(int x) {
        if (x == INT_MIN) 
            return 0;
        int ans = 0;
        bool flag = x<0? true:false;
        for (x=flag? -x:x; x>=10; x/=10){
            ans = ans*10 + x%10;
        }
        //check if out of bounds
        if (!flag){// positive number
            if (INT_MAX / 10 < ans) 
                return 0;
            if (INT_MAX - ans*10 < x)
                return 0;
        }
        else{//negative number
            if (-(INT_MIN / 10) < ans) 
                return 0;
            if (INT_MIN + ans*10 > -x )
                return 0;
        }
        //positive or negative process
        if (!flag){
            ans = ans*10 + x;
            return ans;
        }
        else{
            ans = -ans*10 - x;
            return ans;
        }
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市踢代,隨后出現(xiàn)的幾起案子盲憎,更是在濱河造成了極大的恐慌,老刑警劉巖胳挎,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饼疙,死亡現(xiàn)場離奇詭異,居然都是意外死亡慕爬,警方通過查閱死者的電腦和手機窑眯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澡罚,“玉大人伸但,你說我怎么就攤上這事×羯Γ” “怎么了更胖?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隔显。 經常有香客問我却妨,道長,這世上最難降的妖魔是什么括眠? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任彪标,我火速辦了婚禮,結果婚禮上掷豺,老公的妹妹穿的比我還像新娘捞烟。我一直安慰自己,他們只是感情好当船,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布题画。 她就那樣靜靜地躺著,像睡著了一般德频。 火紅的嫁衣襯著肌膚如雪苍息。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音竞思,去河邊找鬼表谊。 笑死,一個胖子當著我的面吹牛盖喷,可吹牛的內容都是我干的爆办。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼传蹈,長吁一口氣:“原來是場噩夢啊……” “哼押逼!你這毒婦竟也來了步藕?” 一聲冷哼從身側響起惦界,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咙冗,沒想到半個月后沾歪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡雾消,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年灾搏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立润。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡狂窑,死狀恐怖,靈堂內的尸體忽然破棺而出桑腮,到底是詐尸還是另有隱情泉哈,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布破讨,位于F島的核電站丛晦,受9級特大地震影響,放射性物質發(fā)生泄漏提陶。R本人自食惡果不足惜烫沙,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隙笆。 院中可真熱鬧锌蓄,春花似錦、人聲如沸撑柔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乏冀。三九已至蝶糯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辆沦,已是汗流浹背昼捍。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工识虚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妒茬。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓担锤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乍钻。 傳聞我的和親對象是個殘疾皇子肛循,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容