Algorithm
lc1432_改变一个整数能得到的最大差值
思路:
直接从左到右遍历,如果第一位是非1,非9,那么就向1,9获取最大最小值,
如果有1,9,那么再后一位遍历到非1,9的位,将数位替换成9或者0, 直到获取最大最小算差值即可。
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
|
impl Solution {
pub fn max_diff(num: i32) -> i32 {
let s = num.to_string();
let chars: Vec<char> = s.chars().collect();
let n = chars.len();
// 计算最大值:找到第一个不是9的数字,将其替换为9
let mut max_chars = chars.clone();
for i in 0..n {
if chars[i] != '9' {
let target = chars[i];
for j in i..n {
if max_chars[j] == target {
max_chars[j] = '9';
}
}
break;
}
}
// 计算最小值:找到第一个可以替换的数字
let mut min_chars = chars.clone();
if chars[0] != '1' {
// 第一位不是1,将第一位及所有相同的数字替换为1
let target = chars[0];
for j in 0..n {
if min_chars[j] == target {
min_chars[j] = '1';
}
}
} else {
// 第一位是1,找到第一个不是0且不是1的数字,替换为0
for i in 1..n {
if chars[i] != '0' && chars[i] != '1' {
let target = chars[i];
for j in i..n {
if min_chars[j] == target {
min_chars[j] = '0';
}
}
break;
}
}
}
let max_val: i32 = max_chars.iter().collect::<String>().parse().unwrap();
let min_val: i32 = min_chars.iter().collect::<String>().parse().unwrap();
max_val - min_val
}
}
|
Review
塑造你世界观的三种偏见【TED演讲】
扩充认知才能减少偏见。
Tips
小红书推广搜介绍
Share
chaos finance介绍