题意:给定一个整数(包含整数、负数),反转转整数的所有位,例如传入123,传出321;传入-456,传入-654
分析:题目很基础,但是下面的提示确实会被忽略,例如题目中提到的10、100这些数的反转以及越界的问题。
边界条件:整数逆转之后,越界,例如1000000003 这个数,逆转之后,会越界,int型已经不能表示了。负数要单独拎出符号位来处理。
代码:
class Solution {
public:
int reverse(int x) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
bool bNeg = x < 0 ? true : false;
int src = abs(x);
long long dest = 0;
unsigned int multi = 1;
while(src > 0)
{
dest += multi * src % 10;
multi += 10;
src /= 10;
dest *= 10;
}
dest /= 10;
if(bNeg)
{
dest *= -1;
}
if (dest <= INT_MAX && dest >= INT_MIN)
{
return (int)dest;
}
else
{
return 0;
}
}
};
代码在leetcode上提交,AC通过,一共有1020个test case。
但是对于越界的问题,本人在test case中找了,貌似没看到可以触发越界逻辑的case。上述代码对于越界的处理是直接return 0.