最大交换 Maximum Swap
2018-07-28 16:52:20
问题描述:
问题求解:
使用bucket数组来记录每个数最后出现的位置,然后从左向右遍历一遍即可。
public int maximumSwap(int num) { char[] digits = String.valueOf(num).toCharArray(); int[] bucket = new int[10]; for (int i = 0; i < digits.length; i++) bucket[digits[i] - '0'] = i; for (int i = 0; i < digits.length; i++) { for (int k = 9; k > digits[i] - '0'; k--) { if (bucket[k] > i) { char tmp = digits[i]; digits[i] = digits[bucket[k]]; digits[bucket[k]] = tmp; return Integer.valueOf(new String(digits)); } } } return num; }