标签:输入 while 链表反转 链表 new 存在 需要 com 可以转化
??前面我们依次整理了链表反转、字符串反转及其相应的衍生题目,而整数反转可以转化为字符串问题,也可以单独通过运算实现,主要是注意整数存在溢出的问题。
题目(Easy):7. 整数反转
题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 :
输入: 123 输出: 321
输入: -123 输出: -321
输入: 120 输出: 21
解题思路:
??类似于反转字符串,整数反转有两种方法:
??(1)将整数转为字符串,通过字符串的反转来实现整数的反转,整数转字符串String.valueOf(num),字符串转整数Integer.parseInt(str);
??(2)弹出和压入数字,通过pop = x % 10;取出末尾数字,压入到结果的前面。显然,方法二较好。
??
??这里需要注意的还有整数溢出的处理,同样有两种方法,一种可以通过java的异常机制,捕获对应的整数溢出异常,进行处理(NumberFormatException),还有一种是进行提前进行数字是否溢出的检查。int类型的范围是 -2^31——2^31-1,即-2147483648——2147483647.
代码实现:
//方法一,转为字符串实现
public int reverse(int x) {
String s=String.valueOf(x);
if(x<0)
s=s.substring(1);
StringBuffer strBuf = new StringBuffer(s);
String str=strBuf.reverse().toString();
try{
return x>0 ? Integer.parseInt(str) : -1*Integer.parseInt(str);
}catch(NumberFormatException e){
return 0;
}
}
//方法二,弹出和推入数字 & 溢出前进行检查
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;
}
标签:输入 while 链表反转 链表 new 存在 需要 com 可以转化
原文地址:https://www.cnblogs.com/gzshan/p/12528022.html