题目大意:翻转一个整数,如下:
Example1: x = 123, return 321
Example2: x = -123, return -321
需要注意的是,int整数范围为-2^31 ~ 2^31 - 1,10,0000,00003翻转后会超出范围。
刚开始没注意到这个问题,因此出错了好几次,最后提交ac的代码如下,运算时间20ms:
class Solution {
public:
int reverse(int x) {
bool flag=false;
long long resu=0;
if(x<0)
{
flag=true;
x=-x;
}
else if(x==0)return 0;
long long m=10;
while(x%m==0)m*=10; //此处判断末尾的多个0
x=x/(m/10); //除掉有0的几位
while(x!=0)
{
resu=10*resu+x%10;
x=x/10;
}
if(flag)resu=flag?-resu:resu;
if(resu>INT_MAX||resu<INT_MIN)resu=0; //超过范围判断
return resu;
}
};
class Solution {
public:
int reverse(int x) {
bool flag=false;
long long resu=0;
if(x==0)return 0;
else if(x<0)
{
flag=true;
x=-x;
}
while(x!=0)
{
resu=10*resu+x%10;
x=x/10;
}
if(flag)resu=flag?-resu:resu;
if(resu>INT_MAX||resu<INT_MIN)resu=0;
return resu;
}
};
讨论区的最简代码如下,发现原来符号也可以忽略:
class Solution {
public:
int reverse(int x) {
long long res = 0;
while(x) {
res = res*10 + x%10;
x /= 10;
}
return (res<INT_MIN || res>INT_MAX) ? 0 : res;
}
};
2016.09.04更新 JAVA代码
public class Solution {
public int reverse(int x) {
long cur = 0;
boolean flag = x > 0 ? true : false;
long y = x;
y = y > 0 ? y : -y;
while(y > 0) {
cur = cur * 10 + y % 10;
y = y / 10;
}
cur = flag ? cur : -cur;
if(cur > Integer.MAX_VALUE || cur < Integer.MIN_VALUE) {
return 0;
}
return (int)cur;
}
}