给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。
如果反转后整数超过32位的有符号整数的范围[−2^31, 2^31 − 1],就返回0。
示例1:
输入:x=345
输出:543
示例2:
输入:x=-456
输出:-654
示例3:
输入:x=150
输出:15
我给出的答案是:
class Solution {
public int reverse(int x) {
StringBuilder result = new StringBuilder();
String s = String.valueOf(x);
String replace = null;
if (s.contains("-")){
replace= s.replace("-", "");
for (int i=replace.length()-1;i>=0;i--){
char c = replace.charAt(i);
String s1 = String.valueOf(c);
result.append(s1);
}
}else {
for (int i=s.length()-1;i>=0;i--){
char c = s.charAt(i);
String s1 = String.valueOf(c);
result.append(s1);
}
}
String i = result.toString();
if (s.contains("-")){
return -Integer.parseInt(i);
}
return Integer.parseInt(i);
}
}
当输入的整数比较小时,结果是正确的。
但是当输入的整数比较大时,代码就会报错。而且自己这个问题很大
所以看官方思路:
假设 rev是反转后的数据,那么我们可以重复弹出 x的末尾数字。推入rev的末尾。直至x为0。
#弹出x的末尾的数字 digit
digit = x % 10
x/=10
//将弹出的数字digit推入rev的末尾
rev = rev * 10 + digit
private int reverse(int x) {
int rev = 0;
while (x!=0){
if (rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
return 0;
}
//获取余数
int digit = x % 10;
x /=10;
rev = rev*10 +digit;
}
return rev;
}