2025-06-15 Daily Challenge
Today I have done leetcode's June LeetCoding Challenge with cpp
.
June LeetCoding Challenge 15
Description
Max Difference You Can Get From Changing an Integer
You are given an integer num
. You will apply the following steps to num
two separate times:
- Pick a digit
x (0 <= x <= 9)
. - Pick another digit
y (0 <= y <= 9)
. Notey
can be equal tox
. - Replace all the occurrences of
x
in the decimal representation ofnum
byy
.
Let a
and b
be the two results from applying the operation to num
independently.
Return the max difference between a
and b
.
Note that neither a
nor b
may have any leading zeros, and must not be 0.
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
Constraints:
1 <= num <= 108
Solution
class Solution {
public:
int maxDiff(int num) {
string n = to_string(num);
string maxN = n;
int len = n.length();
int start = 0;
while(start < len && maxN[start] == '9') start += 1;
for(int i = start + 1; i < len; ++i) {
if(maxN[i] == maxN[start]) maxN[i] = '9';
}
if(start < len) maxN[start] = '9';
string minN = n;
bool changed = false;
for(int i = 0; i < len && !changed; ++i) {
char target = minN[i];
if(!i) {
if(target == '1') continue;
changed = true;
for(int j = 0; j < len; ++j) {
if(minN[j] == target) minN[j] = '1';
}
} else {
if(target == '0' || target == minN[0]) continue;
changed = true;
for(int j = 0; j < len; ++j) {
if(minN[j] == target) minN[j] = '0';
}
}
}
return stoi(maxN) - stoi(minN);
}
};
// Accepted
// 211/211 cases passed (0 ms)
// Your runtime beats 100 % of cpp submissions
// Your memory usage beats 66.9 % of cpp submissions (8.2 MB)