20250615 finished.
This commit is contained in:
parent
88959d6513
commit
fd548c7ba8
|
@ -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));
|
||||
}
|
Loading…
Reference in New Issue
Block a user