转载:力扣:整数翻转(难点:整数溢出)
(力扣)LeetCode刷題之整數(shù)反轉(zhuǎn)
陳鵬既存一息,多言無益。?關(guān)注他8 人贊同了該文章給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。
示例 1:
輸入: 123 輸出: 321示例 2:
輸入: -123 輸出: -321示例 3:
輸入: 120 輸出: 21注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?2^31, 2^31 ? 1]。請根據(jù)這個假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
臥槽,又是簡單題,簡單個毛線啊,對于我這種菜雞來說,真的好難呀!!!
我的思路一開始就是笨辦法,把數(shù)字轉(zhuǎn)換成字符串,然后判斷是否是正數(shù),負(fù)數(shù),最后轉(zhuǎn)換以后看是否在[-2^31,2^31-1]范圍內(nèi),但是好像不行啊,用什么來接收轉(zhuǎn)換后的數(shù)字呢?環(huán)境只允許存儲32位的有符號數(shù),不能使用long64位的來接收啊????
力扣(LeetCode)官方給出的解題方式如下:
我勒個去啊,這TM的就是一道數(shù)學(xué)題啊!!!
理下思路吧:
官方給出的思想是“彈出”和“推入”
首先是彈出:
/pop operation: //彈出 pop = x % 10; //取余運(yùn)算,得到一個數(shù)字最后一位,得到數(shù)字符號和x的一致 x /= 10; //接上步得到最后一位數(shù)字,該數(shù)字不要最后一個數(shù)字了例如:數(shù)字3456
pop = 3456 % 10= 6
x /=10 → x = 3456/10 = 345
推入:
//push operation://推入 temp = rev * 10 + pop; //rev一開始是0 rev = temp;例如:接上面的
temp = 6
rev = 6
重復(fù)上面的“彈出”,“推入”操作,就可以完成數(shù)字的反轉(zhuǎn)
但是,問題也來了,防止溢出,所以肯定得有個條件的嘛,2^31-1的值為:2147483647,將近21億多,當(dāng)作圓周率記一下吧,要是我有這么多錢就好了,-2^31的值為:-2147483648
如果:“彈出”和“推入”得到的rev的數(shù)值>int類型的最大值/10,就不可能成功了,肯定溢出,例如:rev = 214748365,他下一次“推入”的數(shù)字不管是多少肯定比2^31-1大,
或者rev的數(shù)值=int類型的最大值/10 ,那么“彈出”的數(shù)字>7,也不行
負(fù)數(shù)的同理
總結(jié):學(xué)渣的我能理解也不容易吧,還好數(shù)學(xué)思維好,┭┮﹏┭┮,只能慢慢來了,其他的方法以后再補(bǔ)充吧,感覺做這種題好燒腦啊......
發(fā)布于 2019-02-25力扣(LeetCode)?贊同 8??3 條評論?分享?喜歡?收藏?贊同 8?分享總結(jié)
以上是生活随笔為你收集整理的转载:力扣:整数翻转(难点:整数溢出)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vector拷贝复制方法
- 下一篇: 转载:vscode快捷键