您的位置:首页 > 其它

83.Reverse Integer

2016-01-24 20:48 190 查看
Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

分析:对一个整数求其从低位到高位进行变化之后的值。对一个整数求其从低位到高位进行变化之后的值。 做这个题目的关键是x低位高位转换之后可能溢出,所以需要提前用long型定义转换之后的结果, 然后再判断是否溢出,溢出则返回0.

/**
* 对一个整数求其从低位到高位进行变化之后的值。 做这个题目的关键是x低位高位转换之后可能溢出,所以需要提前用long型定义转换之后的结果,
* 然后再判断是否溢出,溢出则返回0. 这个方法是只求正数的转换。但是在开始的时候要加上对int可表示的最小负数特殊处理,因为
* java中的int类型存储长度为32bit
* .所以范围是“-2^32”到“2^32-1”;也就是“-2147483648”到“2147483647”。 所以对最小负数求绝对值时会溢出。
* 对拿到的x先判断正负,如果是负数则返回绝对值的处理结果乘以-1。是正数的话就直接返回。
* 在方法的处理过程中,要用long存转换之后的结果,然后再判断是否int溢出,溢出则返回0,不溢出则返回其int。
*/
public int reverse(int x) {
if (x == -2147483648l) {/* 单独对这个进行判断是因为对最小的负数求绝对值时会溢出,所以需要特别处理 */
return 0;
}
if (x < 0) {
return -1 * reverse(Math.abs(x));
} else {
int temp = x;
long n = 0;
while (temp != 0) {
n = n * 10 + temp % 10;
temp = temp / 10;
}
if (n > 2147483647) {
return 0;
}
return (int) n;
}
}


/**
* 做这个题目的关键是x低位高位转换之后可能溢出,所以需要提前用long型定义转换之后的结果, 然后再判断是否溢出,溢出则返回0.
* 这个方法是先判断给定的值的正负,然后再进行转换,最后把最初的符号给换回来。
*/
public int reverse2(int x) {
/* flag表示true的时候是负数,false表示正数 */
boolean flag = false;
if (x < 0) {
flag = true;
x = -x;
}
/* 计算出除了符号之外的低位高位交换后的结果 */
long temp = x;
long n = 0;// 转换之后的结果可能溢出,所以用long型定义转换之后的结果,最后返回的时候再取int
while (temp != 0) {
n = n * 10 + temp % 10;
temp = temp / 10;
System.out.println("n = "+n);
}
/* 换回应该正确返回的符号 */
if (flag == true) {
n = -n;
}
/* 判断返回的值是否溢出,溢出则返回0 */
if (n > 2147483647 || (flag && n < -2147483648l)) {
return 0;
}
return (int) n;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: