Algorithm Puzzles: Reverse Integer

Algorithm Puzzles everyday every week sometimes: Reverse Integer

Puzzle

Puzzle from 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 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.

Solving

This puzzle is ez to solve if you considered possible overflow at the very beginning. I’d like to using string to do reverse process, which should be no overflow during reverse, after reversing then do overflow check. Considering that the range of int32_t is [-2147483648, 2147483647], we need to check the value after reversing is in this range or not.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution
{
public:
int32_t reverse(int32_t x)
{
string ori = std::to_string(x);
if (ori[0] == '-')
{
std::reverse(++std::begin(ori), std::end(ori));
}
else
{
std::reverse(std::begin(ori), std::end(ori));
}

if (ori.length() == 10)
{
if (ori[0] > '2')
{
return 0;
}
else if (ori[0] == '2')
{
if (atoi(ori.substr(1, 9).c_str()) > 147483647)
{
return 0;
}
}
}

if (ori.length() == 11)
{
if (ori[1] > '2')
{
return 0;
}
else if (ori[1] == '2')
{
if (atoi(ori.substr(2, 9).c_str()) > 147483648)
{
return 0;
}
}
}
return atoi(ori.c_str());
}
};

Result I got:

One shot pass~~