java integer reverse_Leetcode7 Reverse Integer Java实现及分析
首先
public int reverse(intx) {
int ans = 0;
while(x!=0) {
int temp = x%10;
x/=10;
ans = ans*10+temp;
}
returnans;
}
但是這樣無法檢驗最終結果是否溢出。
我們可以看到,溢出的原因是ans*10+temp>MAX或ans*10+temp
對于正數,舉個小點的例子,一個6bit的整數,范圍在[-32,31],ans>3(31/10)的話,最小ans=4,乘10必然溢出,對應情況1。若ans<3,最大ans=2,乘10+9=29都不會溢出,對應不溢出情況。若ans=3,則分情況考慮,若temp>1,則溢出,temp<=1,則不會溢出,對應情況2。(真是個數學問題啊……要嚴格推導的話還要考慮向下取整,真的麻煩……)
于是對于正數,有:
1.ans>MAX/10時,ans*10+temp確定會溢出;
2.ans==MAX/10且temp>7時,ans*10+temp確定會溢出。
負數同理。
為什么是7呢。因為2^1=2,2^2=4,2^3=8,2^4=16;2^5=32,2^6=64,2^7=128,2^8=256……可以發現,4個一循環,分別個位是2,4,8,6。2^31對應的是8,則2^31-1個位是7。
故有:
public int reverse(intx) {
int ans = 0;
while(x!=0) {
int temp = x%10;
x/=10;
if(ans>Integer.MAX_VALUE/10||(ans==Integer.MAX_VALUE/10&&temp>7)) return 0;
if(ans
ans = ans*10+temp;
}
returnans;
}
總結
以上是生活随笔為你收集整理的java integer reverse_Leetcode7 Reverse Integer Java实现及分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lower_bound()和upper_
- 下一篇: (贪心)区间问题大致思路