1、方法一
思路:
(1)先把x取绝对值并转换为String,反转String再转换回int
(2)注意Math.abs(Integer.MIN_VALUE)不能得到正数,得到的还是其本身,需做特殊处理
public class Solution {
public int reverse(int x) {
if (x == Integer.MIN_VALUE)
return 0;
String abs = Integer.toString(Math.abs(x));
StringBuilder sb = new StringBuilder(abs);
long result = Long.parseLong(sb.reverse().toString());
if (x < 0)
result = -result;
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)
return 0;
return (int)result;
}
}
Runtime: 42ms
2、方法二
思路:
(1)先把x取绝对值求逆序
(2)循环求逆序值,存于result,一旦result溢出则返回0
(3)若x<0,则返回result的相反数
(4)考虑逆序的整数可能溢出,result需要定义为long型,最后再强制转换为int型
public class Solution {
public int reverse(int x) {
int temp = Math.abs(x);
long result = 0;
while (temp >= 1) {
result = 10 * result + temp % 10;
if (result > Integer.MAX_VALUE)
return 0;
temp /= 10;
}
if (x < 0)
result = -result;
return (int)result;
}
}
时间复杂度:O(m),m为x的位数
Runtime: 37ms