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;
}
但是這樣無(wú)法檢驗(yàn)最終結(jié)果是否溢出。
我們可以看到,溢出的原因是ans*10+temp>MAX或ans*10+temp
對(duì)于正數(shù),舉個(gè)小點(diǎn)的例子,一個(gè)6bit的整數(shù),范圍在[-32,31],ans>3(31/10)的話(huà),最小ans=4,乘10必然溢出,對(duì)應(yīng)情況1。若ans<3,最大ans=2,乘10+9=29都不會(huì)溢出,對(duì)應(yīng)不溢出情況。若ans=3,則分情況考慮,若temp>1,則溢出,temp<=1,則不會(huì)溢出,對(duì)應(yīng)情況2。(真是個(gè)數(shù)學(xué)問(wèn)題啊……要嚴(yán)格推導(dǎo)的話(huà)還要考慮向下取整,真的麻煩……)
于是對(duì)于正數(shù),有:
1.ans>MAX/10時(shí),ans*10+temp確定會(huì)溢出;
2.ans==MAX/10且temp>7時(shí),ans*10+temp確定會(huì)溢出。
負(fù)數(shù)同理。
為什么是7呢。因?yàn)?^1=2,2^2=4,2^3=8,2^4=16;2^5=32,2^6=64,2^7=128,2^8=256……可以發(fā)現(xiàn),4個(gè)一循環(huán),分別個(gè)位是2,4,8,6。2^31對(duì)應(yīng)的是8,則2^31-1個(gè)位是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;
}
總結(jié)
以上是生活随笔為你收集整理的java integer reverse_Leetcode7 Reverse Integer Java实现及分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: lower_bound()和upper_
- 下一篇: java图片资源存放_Java编程中图片