题目类型:字符串
题意:
数字反转,给出一个数字,将他的各个位反转,例如123->321,-123->-321
- 注意负数符号不参与。
- 注意反转后开头的0要去掉,例如120->21
- 注意int反转后可能成为double:1534236469/-1534236469,当数组越界int输出0
知识点:
String转化成int,
- valueOf
- Integer.parseInt()
我的思路:
- 将x是转化为string,从后往前找到第一个不为0的数的下标index
- 如果x为正,从index到0倒序拼接
- 如果x为负,从index到1倒序拼接,结果乘以-1
- 如果结果越界,return 0,否则输出。
public int reverse(int x) {
String s = String.valueOf(x);
int len = s.length();
int start = len - 1;
int end = 0;
if (x < 0) end = 1;
for (int i = len - 1; i >= end; i--) {
if (i != 0) {
start = i;
break;
}
}
StringBuilder builder = new StringBuilder();
for(int i = start; i >= end; i--) builder.append(s.charAt(i));
double temp = Double.valueOf(builder.toString());
if (temp > Integer.MAX_VALUE || temp < Integer.MIN_VALUE) {
return 0;
}
else return (int) (temp * ((end == 0) ? 1 : -1));
}
方法二:用double来接收
74%
对x不断除以10取余,res += res * 10 + 余数。
public int reverse(int x) {
double res = 0;
while (x != 0) {
res = res * 10 + x % 10;
x /= 10;
}
if (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) {
return 0;
}
return (int)res;
}