题目
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
我的解答
public class Solution {
public int reverse(int x) {
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
int mark = (x < 0) ? -1 : 1;
if(x == 0)
return 0;
// Math.abs(x),若x是int类型则生成int类型。若x是-2147483648,则必须存成-2147483648L类型,否则会出错。
long temp = Math.abs((long)x);
StringBuilder sb = new StringBuilder();
while(temp != 0){
sb.append(temp % 10);
temp = temp / 10;
}
long res = Long.parseLong(sb.toString()) * mark;
if(res > max || res < min)
res = 0;
return (int)res;
}
}
算法分析:效率低下。一定要注意long、int等类型问题。
答案解答(从数学的角度来进行运算,完成操作)
public class Solution {
public int reverse(int x) {
long res = 0L;
while(x != 0){
// 把之前的尾数*10变成高位,把高位取余后加入尾部
res = res * 10 + x % 10;
x = x / 10;
if(res > Integer.MAX_VALUE || res < Integer.MIN_VALUE)
return 0;
}
return (int)res;
}
}
算法分析:比我的解答好。从数学角度
把低位变成高位、高位变成低位。