-
Notifications
You must be signed in to change notification settings - Fork 0
/
0007. Reverse Integer.js
64 lines (56 loc) · 1.17 KB
/
0007. Reverse Integer.js
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 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: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
/**
* @param {number} x
* @return {number}
*/
/** 1) */
const reverse1 = (x) => {
const n = Math.sign(x) *
parseInt(String(x)
.split('')
.reverse()
.join(''));
if (n < -(2 ** 31) || n > 2 ** 31 - 1) return 0;
return n;
};
/** 2) Pop and push */
// Time O(n)
// Space O(1)
//
// e.g. 123
// d: 3, x: 12, n: 3
// d: 2, x: 1, n: 32
// d: 1, x: 0, n: 321
const reverse = (x) => {
let n = 0;
while (x !== 0) {
// pop
const d = x % 10;
x = ~~(x / 10);
// push
n = n * 10 + d;
// Above codes can be combined to these, but hard to understand
// n = n * 10 + x % 10;
// x = ~~(x / 10);
if (n < -(2 ** 31) || n > 2 ** 31 - 1) return 0;
}
return n;
};