blob: 2fb80c48be08309753c4a94064d0fa0b49fd3807 (
plain)
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
|
fn main() {
dbg!(Solution::reverse(1534236469));
}
struct Solution(());
impl Solution {
pub fn reverse(x: i32) -> i32 {
let n = if x < 0 { x * -1 } else { x };
if let Some(i) = Self::invert(n as u32, 0).0 {
let t: u32 = 1 << 31;
if (i & t) == t {
return 0;
}
if x < 0 {
return i as i32 * -1;
}
return i as i32;
}
0
}
fn invert(n: u32, pow: u32) -> (Option<u32>, u32) {
if n < 10 {
return (Some(n), pow + 1);
}
let m = n % 10;
let d = (n - m) / 10;
let c = Self::invert(d, pow);
if let Some(inner) = c.0
&& let Some(m) = m.checked_mul(10_u32.pow(c.1))
{
return (Some(m + inner), c.1 + 1);
}
(None, 0)
}
}
|