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 `[-2`

, then return ^{31}, 2^{31} - 1]`0`

.

**Assume the environment does not allow you to store 64-bit integers (signed or unsigned).**

**Example 1:**

Input:x = 123Output:321

**Example 2:**

Input:x = -123Output:-321

**Example 3:**

Input:x = 120Output:21

**Example 4:**

Input:x = 0Output:0

**Constraints:**

`-2`

^{31}<= x <= 2^{31}- 1

class Solution {
public:
int reverse(int x) {
if (x == 0) return 0;
int result = 0;
int tmp_result = result;
int tail = 0;
while (x != 0)
{
if (result > INT_MAX / 10 || result < INT_MIN / 10) return 0;
tail = x % 10;
tmp_result = result * 10 + tail;
result = tmp_result;
x = x / 10;
}
return result;
}
};

This is a tricky question as we need to keep track of the number if it is getting exceeded to the given range or not. once to get the concept it is very easy to code.

Time Complexity: O(d) // where d is the digits in the number

Space Complexity: O(1) //We are just taking extra variables to store the result which are independent of input.