Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123 Output: 321
Example 2:
Input: -123 Output: -321
Example 3:
Input: 120 Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
我的思路:将int型数据转为字符串,将字符串逆置,逆置后进行字符串比较
class Solution {
public int reverse(int x) {
String str = String.valueOf(x);
boolean isMinus = x < 0 ? true : false;
if(isMinus){
str = str.substring(1, str.length());
}
str = reverseString(str);
if(isMinus){
if(str.length() >= 10 && str.compareTo("2147483648") > 0){
return 0;
}else{
return -Integer.parseInt(str);
}
}else{
if(str.length() >= 10 && str.compareTo("2147483647") > 0){
return 0;
}else{
return Integer.parseInt(str);
}
}
}
public String reverseString(String s){
int len = s.length();
char[] arr = new char[len];
s.getChars(0, len, arr, 0);
for(int i = 0; i<len/2; i++){
char c = arr[i];
arr[i] = arr[len - 1 - i];
arr[len - 1 - i] = c;
}
return String.valueOf(arr);
}
}
官方思路:每次取尾数(通过对10求余可得),通过累积可实现int型逆置,在累积的过程中判断是否溢出
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10; //取最后一位
x /= 10;
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
rev = rev * 10 + pop; //累积
}
return rev;
}
}