Reverse Integer
Digit extraction with place values
TimeO(log₁₀ n)SpaceO(1)Suboptimal
Uses floating point (Math.log10, Math.pow) and a single overflow check (newNumber > 2³¹) that is wrong for positive numbers: it allows 2³¹ when max positive is 2³¹−1. More state (two place-value counters) and harder to follow than the mod-10 approach.
Code
1
2function reverse(x: number): number {
3 if (Math.abs(x) < 10) {
4 return x
5 }
6
7 let newNumber = 0
8 const lowestSig = 1
9 const highestSig = Math.pow(10, Math.floor(Math.log10(Math.abs(x))))
10 let sigBackward = highestSig
11 let sigForward = lowestSig
12 let num = Math.abs(x)
13 while (sigBackward >= 1) {
14 // Get the last digit in the number so far
15 const digit = Math.floor(num/sigForward)%10 // 12345 with sigForward of 10 = 4
16 newNumber += (digit*sigBackward) // 4 * 100 = 400, for example
17 sigForward *= 10 // goes from 10 => 100 for example
18 sigBackward /= 10 // goest from 1000 => 100 for example
19 }
20
21 if (newNumber > Math.pow(2,32)/2) {
22 return 0
23 }
24 return x < 0 ? -1*newNumber : newNumber
25}
26
27console.log(reverse(0));
28console.log(reverse(1000000000000000000));
29console.log(reverse (123));
30console.log(reverse(-123));
31Animation
Examples
reverse(123) =321
reverse(-123) =-321
reverse(0) =0
reverse(120) =21