欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java integer reverse_Leetcode7 Reverse Integer Java实现及分析

发布时间:2025/3/12 java 27 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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实现及分析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。