Leetcode --- Reverse Integer(Easy)
===
## Description
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^31^, 2^31^ - 1], then return 0.
**Assume the environment does not allow you to store 64-bit integers (signed or unsigned).**
### Examples:
Ex1:
**Input:** x = 123
**Output:** 321
Ex2:
**Input:** x = -123
**Output:** -321
Ex3:
**Input:** x = 2147483647
**Output:** 0
**Explanation:** Overflow
### Constrains:
* -2^31^ <= x <= 2^31^ - 1
## Solutions
### Method 1: 轉成字串處理
```java=
class Solution {
public int reverse(int x) {
String ans = x>= 0 ? new StringBuilder(Integer.toString(x)).reverse().toString() : new StringBuilder(Integer.toString(Math.abs(x))).append("-").reverse().toString();
try
{
return Integer.parseInt(ans);
}
catch(Exception e)
{
return 0;
}
}
}
```
line 3: 等同於
```java
if(x >=0)
{
String s = Integer.toString(x);
StringBuilder sb = new StringBuilder(s);
sb.reverse(); // StringBuilder's method
String ans = sb.toString();
}
else
{
String s = Integer.toString(-x); //去負號
StringBuilder sb = new StringBuilder(s);
sb.append("-"); //append:再字尾加字
sb.reverse(); // StringBuilder's method
String ans = sb.toString();
}
```
### *Note: ==Integer.toString()== 與 ==String.vauleOf()== 基本上無差異*
### Complexity Analysis
Depend on **.toString()** or **.reverse()**
### Submissions on Leetcode
Runtime: **2 ms**, faster than **27.39%** of Java online submissions for Reverse Integer.
Memory Usage: **35.9 MB**, less than **69.89%** of Java online submissions for Reverse Integer.
## Method 2: POP,PUSH digits
直接對數字做分析,一整串數字拆成一個一個digits做翻轉,甚至可以不用用到*Stack*或*Array*完成POP,PUSH的操作,像這樣
```java
//POP
x %=10;
x /=10;
//PUSH
ans = ans *10 + x;
```
而Overflow的處理,將ans存成long型態再比較是否超出int的範圍.
```java=
class Solution {
public int reverse(int x) {
long res = 0;
while (x != 0)
{
res = res * 10 + x % 10;
System.out.println(res);
x = x / 10;
}
if (res < Integer.MIN_VALUE || res > Integer.MAX_VALUE) {
return 0;
} else {
return (int)res;
}
}
}
```
### Complexity Analysis
每次除10
=> **O(log~10~n)**
### Submissions on Leetcode
Runtime: **1 ms**, faster than **100.00%** of Java online submissions for Reverse Integer.
Memory Usage: **36.1MB**, less than **42.60%** of Java online submissions for Reverse Integer.
###### tags: `Leetcode` `Easy`