一、题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
二、示例
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
三、代码
package com
.leetcode
.code
;
public class LeetCode7 {
public static int reverse(int x
) {
if (x
> Integer
.MAX_VALUE
|| x
< Integer
.MIN_VALUE
) {
return 0;
}
int abs
= Math
.abs(x
), num
= 0;
String str
= new StringBuilder(String
.valueOf(abs
)).reverse().toString();
try {
num
= Integer
.parseInt(str
);
} catch (NumberFormatException e
) {
return 0;
}
return num
= x
> 0 ? num
: -num
;
}
public static int reverse2(int x
) {
long rs
= 0;
while(x
!= 0){
rs
= rs
* 10 + x
% 10;
x
/= 10;
}
return (rs
< Integer
.MIN_VALUE
|| rs
> Integer
.MAX_VALUE
) ? 0 : (int) rs
;
}
public static void main(String
[] args
) {
System
.out
.println(reverse(-12300));
System
.out
.println(reverse2(-12300));
}
}
四、小结
这道题还是蛮简单的,怎么通过率这么低呢。
虽然是简单,可以解出来。但你看第一种方法(我自己写的方法)和第二种方法,有什么差别呢?
我的耗时3ms,第二种只有1ms,卧槽,差了三倍的性能。
所以说,一个好的算法,简洁与高效。不能给出再多的评价了。