标签:alt lock 数字 try catch info lan catch 写在前面 整数
写在前面,参考的是力扣官网的画解算法
/*
* @lc app=leetcode.cn id=7 lang=java
*
* [7] 整数反转
*/
// @lc code=start
class Solution {
public int reverse(int x) {
//定义最后输出的结果为ans
int ans=0;
while (x!=0){
//取个位
int pop=x%10;
//判断是否上溢出
//1、ans>Integer.MAX_VALUE/10,还有pop需要添加
//2、ans==Integer.MAX_VALUE/10 && pop>7,7是2^31-1的个位数
if(ans>Integer.MAX_VALUE/10 || (ans==Integer.MAX_VALUE/10 && pop>7)){
return 0;
}
//判断是否下溢出
//1、ans<Integer.MIN_VALUE/10,还有pop需要添加
//2、ans==Integer.MIN_VALUE/10 && pop<-8,8是2^31的个位数
if(ans<Integer.MIN_VALUE/10 || (ans==Integer.MIN_VALUE/10 && pop<-8)){
return 0;
}
//反转输出结果
ans=ans*10+pop;
//将数字x的每一位拆开
x/=10;
}
//得到最后的结果
return ans;
}
}
// @lc code=end
1、通过字符串转换加try catch
的方式来解决(效率低)
2、通过数学计算来解决
1、通过循环将数字x
的每一位拆开,在计算新值时每一步都判断是否溢出
2、溢出的条件有两个
??(1)大于整数最大值MAX_VALUE
??(2)小于整数最小值MIN_VALUE
3、设当前计算结果为ans
;下一位为pop
4、从ans*10+pop>MAX_VALUE
这个溢出条件来看
??(1)当出现ans>MAX_VALUE/10
且还有pop需要添加
时,则一定溢出
??(2)当出现ans=MAX_VALUE/10
且pop>7
时,则一定溢出,7是2^31-1的个位数
5、从ans*10+pop<MIN_VALUE
这个溢出条件来看
??(1)当出现ans<MIN_VALUE/10
且还有pop需要添加
时,则一定溢出
??(2)当出现ans=MIN_VALUE/10
且pop<-8
时,则一定溢出,8是2^31的个位数
3.1
3.2
3.3
标签:alt lock 数字 try catch info lan catch 写在前面 整数
原文地址:https://www.cnblogs.com/lxr-xiaorong/p/13447231.html