20250615 finished.

This commit is contained in:
jackfiled 2025-06-15 21:44:53 +08:00
parent 88959d6513
commit fd548c7ba8
Signed by: jackfiled
GPG Key ID: DEF448811AE0286D

View File

@ -0,0 +1,94 @@
/**
* [1432] Max Difference You Can Get From Changing an Integer
*/
#include <bits/stdc++.h>
#include <gtest/gtest.h>
using namespace std;
// submission codes start here
class Solution
{
public:
int maxDiff(int num)
{
string numString = to_string(num);
// Select the first, not 9 number.
int targetPos = 0;
while (targetPos < numString.size() - 1)
{
if (numString[targetPos] != '9')
{
break;
}
targetPos += 1;
}
auto maxNumber = replaceDigit(numString, numString[targetPos], '9');
targetPos = 0;
char minimumChar = '1';
// If the first number is not 1, select the first number.
// If the first number is 1, select next, not zero number.
if (numString[targetPos] == '1')
{
targetPos = 1;
minimumChar = '0';
while (targetPos < numString.size())
{
if (numString[targetPos] == '1')
{
// Can not replace 1 when the first number is 1.
targetPos += 1;
continue;
}
if (numString[targetPos] != '0')
{
break;
}
targetPos += 1;
}
}
int minNumber = num;
if (targetPos != numString.size())
{
minNumber = replaceDigit(numString, numString[targetPos], minimumChar);
}
return maxNumber - minNumber;
}
static auto replaceDigit(const string &num, char source, char target) -> int
{
int result = 0;
for (const char i : num)
{
if (i == source)
{
result = result * 10 + target - '0';
}
else
{
result = result * 10 + i - '0';
}
}
return result;
}
};
// submission codes end
TEST(P1432, Test1)
{
ASSERT_EQ(888, Solution().maxDiff(555));
ASSERT_EQ(8, Solution().maxDiff(9));
ASSERT_EQ(888, Solution().maxDiff(111));
ASSERT_EQ(80000, Solution().maxDiff(10000));
}