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

public int reverse(int x) {
if(x==0){
return 0;
}
int rev = 0;
while(x!=0){
int rem = x%10;
int currRev = rev*10 + rem;
if((currRev-rem)/10 != rev){
return 0;
}
rev = currRev;
x = x /10;
}
return rev;
}

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.