Skip to content

Commit d692b9d

Browse files
authored
Create 2566_maximum_difference_by_remapping_a_digit.rs
1 parent 3443d42 commit d692b9d

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
impl Solution {
2+
pub fn min_max_difference(num: i32) -> i32 {
3+
let decompose_digits = |mut a: i32| {
4+
let mut digits = vec![];
5+
while a > 0 {
6+
digits.push(a % 10);
7+
a /= 10;
8+
}
9+
digits
10+
};
11+
12+
let mut digits = decompose_digits(num);
13+
digits.reverse();
14+
15+
let (min_remap, mut max_remap) = (digits[0], -1);
16+
for &d in &digits {
17+
if d != 9 {
18+
max_remap = d;
19+
break;
20+
}
21+
}
22+
23+
let mut mul = 1;
24+
let (mut a, mut b) = (0, 0);
25+
let mut diff = 0;
26+
for &digit in digits.iter().rev() {
27+
let a = if digit == max_remap { 9 } else { digit };
28+
let b = if digit == min_remap { 0 } else { digit };
29+
diff += (a - b) * mul;
30+
mul *= 10;
31+
}
32+
diff
33+
}
34+
}

0 commit comments

Comments
 (0)