返回

Java&C++题解与拓展——leetcode670.最大交换【什么知识点】

后端

在leetcode670.最大交换题目中,我们要求在给定的数字中找到最大交换,并返回由交换后的数字组成的最大数字。例如,对于数字123,最大交换是321。

我们可以使用贪心算法来解决这个问题。贪心算法是一种在每一步中都做出局部最优选择,以期得到全局最优解的算法。在这个问题中,我们可以贪婪地选择每一步中最大的数字与最小的数字进行交换。

以下是使用Java、C++和Rust三种语言编写的代码:

Java代码:

public class Solution {
    public int maximumSwap(int num) {
        char[] arr = String.valueOf(num).toCharArray();
        int[] last = new int[10];
        for (int i = 0; i < arr.length; i++) {
            last[arr[i] - '0'] = i;
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 9; j > arr[i] - '0'; j--) {
                if (last[j] > i) {
                    char temp = arr[i];
                    arr[i] = arr[last[j]];
                    arr[last[j]] = temp;
                    return Integer.parseInt(new String(arr));
                }
            }
        }
        return num;
    }
}

C++代码:

class Solution {
public:
    int maximumSwap(int num) {
        string s = to_string(num);
        int n = s.size();
        int last[10];
        for (int i = 0; i < n; i++) {
            last[s[i] - '0'] = i;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 9; j > s[i] - '0'; j--) {
                if (last[j] > i) {
                    swap(s[i], s[last[j]]);
                    return stoi(s);
                }
            }
        }
        return num;
    }
};

Rust代码:

impl Solution {
    pub fn maximum_swap(num: i32) -> i32 {
        let mut s = num.to_string();
        let mut n = s.len();
        let mut last = vec![0; 10];
        for i in 0..n {
            last[s.as_bytes()[i] as usize - '0' as usize] = i;
        }
        for i in 0..n {
            for j in (s.as_bytes()[i] as usize + 1)..10 {
                if last[j] > i {
                    s.as_bytes_mut()[i] = j as u8;
                    s.as_bytes_mut()[last[j]] = s.as_bytes()[i];
                    return s.parse::<i32>().unwrap();
                }
            }
        }
        num
    }
}

除了上述代码外,我们还可以使用C#、Python等其他语言来编写代码。

希望本文对您有所帮助。如果您有任何疑问,请随时留言。