题目
给定一个范围为 32 位 int 的整数,将其颠倒。
例 1:
输入: 123
输出: 321
复制代码
例 2:
输入: -123
输出: -321
复制代码
例 3:
输入: 120
输出: 21
复制代码
注意: 假设我们的环境只能处理 32 位 int范围内的整数。根据这个假设, 如果颠倒后的结果超过这个范围,则返回 0。
方案
这个题目其实挺简单的;思路如下:
- 判断输入的数字是否大于最大整数,其实这里没有必要判断,因为如果参数输入大于最大整数的话会直接报错。
- 将整数转换成字符串
- 判断是否是负数,这个依据就是判断字符串中是否存在‘-’
- 从后向前开始遍历,注意的是必须后向遍历且初始为0的情况下保持继续向前迭代。
- 如果转换之后的值大于最大整数,则会导致string转int失败,抛出异常,那么我们直接在这把异常捕获,并且返回0(偷懒一波,丷)
public int reverse(int x) {
int result = 0;
if (x >Integer.MAX_VALUE){
return 0 ;
}
String s =String.valueOf(x);
int len = 0;
if (s!=null&&s.length()!=0&&s.charAt(0)=='-'){
len = 1;
}else if(s.length() == 1){
return x;
}
int lastp = s.length()-1;
boolean isStart = true;
String ints = "";
while( lastp >= len){
if (isStart && s.charAt(lastp)=='0'){
while (s.charAt(lastp)=='0'){
lastp--;
}
isStart = false;
}
if (isStart){
isStart = false;
}
ints = ints+s.charAt(lastp);
lastp--;
}
try{
result = Integer.parseInt(ints);
}catch (NumberFormatException e){
return 0;
}
return len==0?result:result*(-1);
}
复制代码