反转整数
题目
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
样例
给定 x = 123,返回 321
给定 x = -123,返回 -321题解
1.把整数转换成char数组,然后进行反转,再判断是否溢出以及符号。注意处理好溢出问题。
public class Solution {
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
boolean lessThanZero = n < 0;
char[] x_char = Integer.toString(Math.abs(n)).toCharArray();
int len = x_char.length;
for (int i=0;i<len/2;i++)
{
char temp = x_char[i];
x_char[i] = x_char[len-i-1];
x_char[len-i-1] = temp;
}
long n_l = Long.valueOf(new String(x_char));
if (n_l > Integer.MAX_VALUE)
{
return 0;
}
return lessThanZero?-(int)n_l:(int)n_l;
}
}
2.将整数n从低位到高位进行遍历,整数取最低位的方法为n % 10。可以逐步将n的最低位反转至结果的最高位,方法为
int i = result * 10 + n % 10;
判断是否发生溢出可用如下代码,可以自己体会一下。
i / 10 != result
public class Solution {
/**
* @param n the integer to be reversed
* @return the reversed integer
*/
public int reverseInteger(int n) {
int result = 0;
while (n != 0)
{
int i = result * 10 + n % 10;
n /= 10;
if (i / 10 != result)
{
return 0;
}
result = i;
}
return result;
}
}
Last Update 2016.9.16