【leetcode】Reverse Integer(考慮溢出問題)

7. Reverse Integer

leetcode題目

題目描述

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 hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

題解

Solution1:

Runtime: 12ms

About:
    if (temp / 10 != result) {
        return 0;
    } 
For example, if 'b = a * 10' causes overflow,
'b' will be equal to a strange pseudo-random number.
So 'b/10' will not be equal to 'a' anymore.
class Solution {
public:
    int reverse(int x) {
        int result = 0;
        while(x) {
            int temp = result * 10 + x % 10;
            if (temp / 10 != result) {
                return 0;
            } 
            result = temp;
            x /= 10;
        }
        return result;
    }
};

Solution2:

Runtime: 16ms

class Solution {
public:
    int reverse(int x) {
        long long ans = 0;
        while (x) {
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans < INT_MIN || ans > INT_MAX ? 0 : ans;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章