题目链接 https://leetcode-cn.com/problems/reverse-integer/
题目描述
给出一个 32 位的有符号整数, 你需要将这个整数中每位上的数字进行反转.
备注
注意:
假设我们的环境只能存储得下 32 位的有符号整数, 则其数值范围为 $[?2^{31}, 2^{31} ? 1]$. 请根据这个假设, 如果反转后整数溢出那么就返回 0.
示例 1
输入: 123
输出: 321
示例 2
输入: -123
输出: -321
示例 3
输入: 120
输出: 21
题解
- public int reverse(int x) {
- int rev = 0;
- while (x != 0) {
- int pop = x % 10;
- x /= 10;
- if (rev> Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop> 7)) return 0;
- if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
- rev = rev * 10 + pop;
- }
- return rev;
- }
复杂度分析
时间复杂度:$O(log(x))$,x 中大约有 $log_{10}(x)$ 位数字.
空间复杂度:$O(1)$.
手记
32 位有符号整数的范围为 $(-2,147,483,648 - 2,147,483,647)$ . Java 中有最大最小值的静态常量, 我们直接调用就好, 不过这道题要想完美解答, 需要知道范围两端的个位数.
附
这题很简单, 但是我开始没有做的很完美, 继续加油吧.
来源: http://www.bubuko.com/infodetail-3075864.html