LeetCode Reverse Integer

7. Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.


题意就是要我们把整数逆序,需要注意当逆序之后超出int表示范围时,返回0。所以我们用double来保存逆序之后的整数,将其和INT_MAX比较,如果大于INT_MAX,则输出0。 完整代码如下:

class Solution {
public:
    int reverse(int x)
    {
        unsigned int y = (x > 0) ? x : -x;
        double ans = 0;
        while (y) {
            ans = ans * 10 + (y % 10);
            y = y / 10;
        }
        if (ans > INT_MAX)
            return 0;
        return x < 0 ? -ans : ans;
    }
};

本代码提交AC,用时8MS。

二刷。如果不用double存储的话,该怎么办?难就难在如何处理越界的问题。我们可以在计算y的过程中判断y是否越界,代码如下。

如果tmp=y*10+reminder>INT_MAX,有两种情况。一种情况是y*10本身就已经>INT_MAX了,此时即y>INT_MAX/10。另一种情况是y*10没>INT_MAX,是加上reminder之后大于的,由于INT_MAX=2147483647,所以如果reminder>7的话,y*10+reminder就会大于INT_MAX。INT_MIN的情况类似。另外,负数的余数也是负数,所以正负数的情况可以合并考虑。

class Solution {
public:
	int reverse(int x) {

		int y = 0;
		while (x != 0) {
			int reminder = x % 10;
			x /= 10;
			if (y > INT_MAX / 10 || (y == INT_MAX / 10 && reminder > 7))return 0;
			if (y < INT_MIN / 10 || (y == INT_MIN / 10 && reminder < -8))return 0;
			y = y * 10 + reminder;
			
		}
		return y;
	}
};

本代码提交AC,用时4MS。

2 thoughts on “LeetCode Reverse Integer

  1. Pingback: LeetCode Palindrome Number | bitJoy > code

  2. Pingback: LeetCode String to Integer (atoi) | bitJoy > code

Leave a Reply

Your email address will not be published. Required fields are marked *