Skip to content

Latest commit

 

History

History
46 lines (38 loc) · 1.06 KB

README_CN.md

File metadata and controls

46 lines (38 loc) · 1.06 KB

670. 最大交换

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1:

输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2:

输入: 9973
输出: 9973
解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 108]

题解 (Rust)

1. 贪心

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
    }
}