给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
输入: 9973 输出: 9973 解释: 不需要交换。
- 给定数字的范围是 [0, 108]
impl Solution {
pub fn maximum_swap(num: i32) -> i32 {
let mut digits = num.to_string().into_bytes();
let mut last = [0; 10];
for i in 0..digits.len() {
last[(digits[i] - b'0') as usize] = i;
}
for i in 0..digits.len() {
for j in (((digits[i] - b'0') as usize + 1)..=9).rev() {
if last[j] > i {
digits.swap(i, last[j]);
return String::from_utf8(digits).unwrap().parse().unwrap();
}
}
}
num
}
}