题目描述
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
要求:
- 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0
- 假设环境不允许存储 64 位整数(有符号或无符号)
示例:
//输入:x = 123
//输出:321
//输入:x = -123
//输出:-321
//输入:x = 120
//输出:21
解题方法
方法一
先判断是否是正数,如为正数,直接转为字符串;如为负数,截取数字部分,转为字符串,通过字符串方法反转,拼接上符号.转换为整数.
public int reverse(int x) {
String s = String.valueOf(x);
String s2 = "";
//处理小于0
if (x<0){
s2 = String.valueOf(s.charAt(0));
s = s.substring(1);
}
//反转数字
String s1 = new StringBuffer(s).reverse().toString();
try {
return Integer.parseInt(s2+s1);
}catch (Exception e) {
return 0;
}
}
方法二
此方法,网上学习,很简单易懂.通过取余数和取除数,反转数字,性能效率好.
public static int reverse(int x){
if(x==0){
return 0;
}
long res = 0;
while (x != 0){
res = res * 10 + x % 10;
x /= 10;
}
if (res>Math.pow(2,31)||res<Math.pow(-2,31)){
res=0;
}
return (int) res;
}
方法对比
方法二仅仅通过数字计算得到结果,性能效率比较高,推荐方法二.