670. 最大交换

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

public class Solution {

    private void swap(char[] data, int a, int b) {
        char tmp = data[a];
        data[a] = data[b];
        data[b] = tmp;
    }

    public int maximumSwap(int num) {
        char[] digits = String.valueOf(num).toCharArray();
        int[] last = new int[10];
        for (int i = 0; i < digits.length; ++i) {
            last[digits[i] - '0'] = i;
        }

        for (int i = 0; i < digits.length; ++i) {
            for (int j = 9; j > digits[i] - '0'; --j) {
                if (last[j] > i) {
                    swap(digits, i, last[j]);
                    return Integer.parseInt(String.valueOf(digits));
                }
            }
        }

        return num;
    }
}
posted @ 2021-12-13 10:20  Tianyiya  阅读(40)  评论(0)    收藏  举报