Formatted question description: https://leetcode.ca/all/1432.html
1432. Max Difference You Can Get From Changing an Integer
Level
Medium
Description
You are given an integer num
. You will apply the following steps exactly two times:
- Pick a digit
x (0 <= x <= 9)
. - Pick another digit
y (0 <= y <= 9)
. The digity
can be equal tox
. - Replace all the occurrences of
x
in the decimal representation ofnum
byy
. - The new integer cannot have any leading zeros, also the new integer cannot be 0.
Let a
and b
be the results of applying the operations to num
the first and second times, respectively.
Return the max difference between a
and b
.
Example 1:
Input: num = 555
Output: 888
Explanation: The first time pick x = 5 and y = 9 and store the new integer in a.
The second time pick x = 5 and y = 1 and store the new integer in b.
We have now a = 999 and b = 111 and max difference = 888
Example 2:
Input: num = 9
Output: 8
Explanation: The first time pick x = 9 and y = 9 and store the new integer in a.
The second time pick x = 9 and y = 1 and store the new integer in b.
We have now a = 9 and b = 1 and max difference = 8
Example 3:
Input: num = 123456
Output: 820000
Example 4:
Input: num = 10000
Output: 80000
Example 5:
Input: num = 9288
Output: 8700
Constraints:
1 <= num <= 10^8
Solution
Obviously, a
is the maximum possible integer and b
is the minimum possible integer.
To obtain a
, find the highest digit that is not 9, and replace all the digits with the value to 9.
To obtain b
, consider two cases.
- If the highest digit is 1, then find the highest digit that is not 0 or 1, and replace all the digits with the value to 0. Note that the original digit cannot have value 1 since the highest digit cannot be changed to 0.
- If the nighest digit is not 1, then simply replace all the digits with the same value as the highest digit to 1.
After obtaining a
and b
, return a - b
.
class Solution {
public int maxDiff(int num) {
int max = getMax(num), min = getMin(num);
return max - min;
}
public int getMax(int num) {
char[] array = String.valueOf(num).toCharArray();
int length = array.length;
char original = '0';
for (int i = 0; i < length; i++) {
if (array[i] != '9') {
original = array[i];
break;
}
}
for (int i = 0; i < length; i++) {
if (array[i] == original)
array[i] = '9';
}
return Integer.parseInt(new String(array));
}
public int getMin(int num) {
char[] array = String.valueOf(num).toCharArray();
int length = array.length;
if (array[0] == '1') {
char original = '0';
for (int i = 1; i < length; i++) {
if (array[i] != '0' && array[i] != '1') {
original = array[i];
break;
}
}
for (int i = 1; i < length; i++) {
if (array[i] == original)
array[i] = '0';
}
} else {
char original = array[0];
for (int i = 0; i < length; i++) {
if (array[i] == original)
array[i] = '1';
}
}
return Integer.parseInt(new String(array));
}
}