ID | Title | Difficulty | |
---|---|---|---|
Loading... |
670. Maximum Swap
Medium
LeetCode
Math, Greedy
Problem
You are given an integer num. You can swap two digits at most once to get the maximum valued number.
Return the maximum valued number you can get.
Example 1:
Input: num = 2736
Output: 7236
Explanation: Swap the number 2 and the number 7.
Example 2:
Input: num = 9973
Output: 9973
Explanation: No swap.
Constraints:
- $0 <= num <= 10^8$
Code
class Solution {
public int maximumSwap(int num) {
int[] dict = new int[10];
char[] arr = String.valueOf(num).toCharArray();
for (int i = 0; i < arr.length; i++) {
dict[arr[i] - '0'] = i;
}
for (int i = 0; i < arr.length; i++) {
int currNum = arr[i] - '0';
// 比当前数大的数 有没有在当前数后边
for (int k = 9; k > currNum; k--) {
// index在当前数字之后
if (dict[k] > i) {
char temp = arr[i];
arr[i] = arr[dict[k]];
arr[dict[k]] = temp;
return Integer.parseInt(new String(arr));
}
}
}
return num;
}
}
class Solution {
public int maximumSwap(int num) {
String numStr = String.valueOf(num);
int len = numStr.length();
char[] sorted = numStr.toCharArray();
Arrays.sort(sorted);
String numStrSorted = new String(sorted);
for (int i = 0; i < len; i++) {
char numC = numStr.charAt(i);
char sortedC = numStrSorted.charAt(len - i - 1);
if (numC != sortedC) {
return swap(numStr, i, sortedC);
}
}
return num;
}
private int swap(String numStr, int start, char maxNum) {
char[] numArr = numStr.toCharArray();
int maxIndex = start;
for (int i = start; i < numArr.length; i++) {
if (numArr[i] == maxNum) {
maxIndex = i;
}
}
numArr[maxIndex] = numArr[start];
numArr[start] = maxNum;
return Integer.parseInt(new String(numArr));
}
}
按 <- 键看上一题!
669. Trim a Binary Search Tree
按 -> 键看下一题!
671. Second Minimum Node In a Binary Tree