🍅 作者主頁:不吃西紅柿
🍅 簡介:CSDN博客專家🏆、資訊技術智庫公號作者?,簡歷模板、職場PPT模板、技術難題交流、面試套路盡管【關注】私聊我,
🍅 歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!

給你一個 32 位的有符號整數 x ,回傳將 x 中的數字部分反轉后的結果,
如果反轉后整數超過 32 位的有符號整數的范圍 [?231, 231 ? 1] ,就回傳 0,
假設環境不允許存盤 64 位整數(有符號或無符號),
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0

首先我們想一下,怎么去反轉一個整數?
用堆疊?
或者把整數變成字串,再去反轉這個字串?
這兩種方式是可以,但并不好,實際上我們只要能拿到這個整數的 末尾數字 就可以了,
以12345為例,先拿到5,再拿到4,之后是3,2,1,我們按這樣的順序就可以反向拼接處一個數字了,也就能達到 反轉 的效果,
怎么拿末尾數字呢?好辦,用取模運算就可以了

1、將12345 % 10 得到5,之后將12345 / 10
2、將1234 % 10 得到4,再將1234 / 10
3、將123 % 10 得到3,再將123 / 10
4、將12 % 10 得到2,再將12 / 10
5、將1 % 10 得到1,再將1 / 10
這么看起來,一個回圈就搞定了,回圈的判斷條件是x>0
但這樣不對,因為忽略了 負數
回圈的判斷條件應該是while(x!=0),無論正數還是負數,按照上面不斷的/10這樣的操作,最后都會變成0,所以判斷終止條件就是!=0
有了取模和除法操作,對于像12300這樣的數字,也可以完美的解決掉了,
看起來這道題就這么解決了,但請注意,題目上還有這么一句
假設我們的環境只能存盤得下 32 位的有符號整數,則其數值范圍為 [?2^31, 2^31 ? 1],
也就是說我們不能用long存盤最終結果,而且有些數字可能是合法范圍內的數字,但是反轉過來就超過范圍了,
假設有1147483649這個數字,它是小于最大的32位整數2147483647的,但是將這個數字反轉過來后就變成了9463847411,這就比最大的32位整數還要大了,這樣的數字是沒法存到int里面的,所以肯定要回傳0(溢位了),
甚至,我們還需要提前判斷

上圖中,綠色的是最大32位整數
第二排數字中,橘子的是5,它是大于上面同位置的4,這就意味著5后跟任何數字,都會比最大32為整數都大,
所以,我們到【最大數的1/10】時,就要開始判斷了
如果某個數字大于 214748364那后面就不用再判斷了,肯定溢位了,
如果某個數字等于 214748364呢,這對應到上圖中第三、第四、第五排的數字,需要要跟最大數的末尾數字比較,如果這個數字比7還大,說明溢位了,
對于負數也是一樣的

上圖中綠色部分是最小的32位整數,同樣是在【最小數的 1/10】時開始判斷
如果某個數字小于 -214748364說明溢位了
如果某個數字等于 -214748364,還需要跟最小數的末尾比較,即看它是否小于8,
熱門專欄推薦:
🥇 大資料集錦專欄:大資料-硬核學習資料 & 面試真題集錦
🥈 資料倉庫專欄:數倉發展史、建設方法論、實戰經驗、面試真題
🥉 Python專欄:Python相關黑科技:爬蟲、演算法、小工具
(優質好文持續更新中……)?

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295651.html
標籤:python
