1.数学方法:
·没有数组和堆栈的帮助下使用数学方法:
从ans * 10 + pop > MAX_VALUE这个溢出条件来看
·当出现 ans > MAX_VALUE / 10 且 还有pop需要添加 时,则一定溢出
·当出现 ans == MAX_VALUE / 10 且 pop > 7 时,则一定溢出,7是2^31 - 1的个位数
从ans * 10 + pop < MIN_VALUE这个溢出条件来看
·当出现 ans < MIN_VALUE / 10 且 还有pop需要添加 时,则一定溢出
·当出现 ans == MIN_VALUE / 10 且 pop < -8 时,则一定溢出,8是-2^31的个位数
public class Solution {
public int reverse(int x){
int ans=0;//初始化颠倒后的整数
while(x!=0){
int pop=x%10;//获取X的最后一位
//判断ans是否溢出
if (ans>Integer.MAX_VALUE/10||(ans==Integer.MAX_VALUE/10&&pop==7))//ans=ans*10+pop溢出,ans*10+pop>MAX_VALUE
return 0;
if (ans<Integer.MIN_VALUE/10||(ans==Integer.MIN_VALUE/10&&pop<-8))
return 0;
ans=ans*10+pop; //颠倒后的X
x/=10; //除去X的最后一位
}
return ans;
}
public static void main(String[] args) {
int x=0;
Solution a=new Solution();
System.out.println(a.reverse(x));
}
}
pop operation 弹出操作,上托操作 从堆栈顶部取出数据元素的操作。出栈操作
push operation 推送操作,进栈操作,压栈操作
2.字符串与trycatch:
public class Solution_str {
public int reverse(int x){
int y=x;
if (y<0)
y*=(-1);
String str=String.valueOf(y);//String.valueOf方法,将其他类型的数据转换为String类型
char[] temp= str.toCharArray();//toCharArray方法:将字符串转换为字符数组
str="";//初始化str
for (int i=temp.length-1;i>=0;i--){
str+=temp[i];
}
try {
int result=Integer.parseInt(str);//Integer.parseInt()方法,将()里的类型转换为整数;
if (result<0){
return result*(-1);
}else {
return result;
}
}catch (Exception e){
return 0;
}
}
public static void main(String[] args) {
int x=123456;
Solution_str str=new Solution_str();
System.out.println(str.reverse(x));
}
}
复习(学习)常用方法:
String.valueOf方法,将其他类型的数据转换为String类型
toCharArray方法:将字符串转换为字符数组
Integer.parseInt()方法,将()里的类型转换为整数;