整数反转

解法一:转换为字符串进行反转

思路:将整数转换为字符串进行反转,数字溢出使用异常捕获。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution{
public int reverse(int x){
String str=" ";
int res=0;
if(x<0){
str="-"+new StringBuffer(String.valueOf(x).substring(1)).reverse().toString();
}else{
str=new StringBuffer(String.valueOf(x)).reverse().toString();
}
if(str=" ") return 0;
try{
res=Integer.valueOf(str);
}
catch(Exception e){
return 0;
}
return res;
}
}

知识点补充

  • **Integer.parseInt(s)**​的作用就是把字符串s解析成有符号的int基本类型。

  • Integer.parseInt(s)多次解析同一个字符串得到的int基本类型数据是相等的,可以直接通过“==”进行判断是否相等。

  • **Integer.valueOf(s)**把字符串s解析成Integer对象类型,返回的integer 可以调用对象中的方法。

  • Integer.valueOf(s)多次解析相同的一个字符串时,得到的是Integer类型的对象,得到的对象有时是同一个对象,有时是不同的对象,要根据把s字符串解析的整数值的大小进行决定:如果s字符串对应的整数值在 -128—127之间,则解析出的Integer类型的对象是同一个对象;如果s字符串对应的整数值不在-128~127之间,则解析出的Integer类型的对象不是同一个对象。不管对象是否相等,对象中的value值是相等的。

解法二:求余倒转法

思路:如1234,先1234%10得4,然后1234/10=123;继续123%10=3,然后123/10=12;继续12%10=2,然后12/10=1。然后就可以得到4321。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ReverseInt {
public int reverse(int x){
int res=0;
while (x!=0){
//每次取末尾数字
int temp=x%10;
//判断是否大于最大32位整数
if(res>214748364||res==214748364&&temp>7){
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && temp<-8)) {
return 0;
}
res=res*10+temp;
x/=10;
}
return res;
}
}