这是一道再水不过的题。但是这道题其实会引起一些思考的
这道题解法一定很多
初见这道题时,大多数人想的思路应该就是直接暴力 数字转字符串。但是这样未免太低级了。
在高级点就是,反转其实可以用栈。
一步一步用vector 推进去 或者用栈推进去然后输出就行了
中间要判断是否溢出,还有0和负号的一些处理
但是还有一种解法。利用数学
class Solution { public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0; if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0; rev = rev * 10 + pop; } return rev; } };
用数学的除和取余实现出栈入栈。空间复杂度是常数级别
对于溢出的判断。其实可以用try catch返回0
但是这样好像不太好
为什么有7和-8
因为-2^31^=-2147483648,2^31^-1=2147483647
怎么心算这个呢
你知道2的四次方末位是6,那么就能知道2的32次方末位6,推出2的31次方末位是8
其实就能心算出来了