题目翻译:
将数字逆置
Example1: x = 123, return 321
Example2: x = -123, return -321
分析:DONE
思路首选:要先知道数的正负,正数直接反,负数先变成正数再反(增加一个flag记录是否为负数)
正数具体反过程---------先一位一位的个位取出来(他是新数的最高位,循环一次*10),取了之后再将这个数缩小10倍(取整)重复如此操作,同时,题目需要溢出处理,因为反过来后可能越界。
空间复杂度为O(N),时间复杂度为O(1),N为位数
class Solution {
public:
int reverse(int x) {
bool flag=true;
if(x < 0)
{
flag=false;
x*=-1;
}
long long result=0;
while(x)
{
result=result*10+x%10;
x/=10;
}
if(!flag)
result*=-1;
//溢出判断
return (result>INT_MAX || result<INT_MIN )?0:result;
}
};
别人的简洁算法:
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;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50354544
原作者博客:http://blog.csdn.net/ebowtang