Reverse Integer
Problem
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
Examples
Example 1:
Input: x = 123
Output: 321
Example 2:
Input: x = -123
Output: -321
Example 2:
Input: x = 120
Output: 21
Constraints
-231 <= x <= 231 - 1
Solution
For each digit of the input x, pull the least-significant-digit and append it to the result, then shift the result over. Before this computation, we need to check if any of the arithmetic will overflow.
class Solution {
public:
int reverse(int x) {
int result = 0;
constexpr auto MAX = std::numeric_limits<int>::max() / 10;
constexpr auto MIN = std::numeric_limits<int>::lowest() / 10;
while(x) {
// Check if below arithmetic would overflow
if (result > MAX || result < MIN) {
return 0;
}
// Shift result left and add right-most digit of input
result *= 10;
result += x % 10;
x /= 10;
}
return result;
}
};