C++中改变整数可以获得的最大差值
假设我们有一个整数num。我们将精确地应用以下步骤两次,步骤如下:
选择一个范围在0到9之间的数字x。
选择另一个范围在0到9之间的数字y。数字y可以等于x。
将num十进制表示中所有出现的x替换为y。新的整数不能有任何前导零,也不能值为0。
现在考虑a和b分别为第一次和第二次对num应用操作的结果。然后找到a和b之间的最大差值。
因此,如果输入为555,则输出为888,因为第一次选择x=5,y=9并将新整数存储在a中。第二次选择x=5,y=1并将新整数存储在b中。
因此我们现在有a = 999,b = 111,最大差值为999 - 111 = 888。
为了解决这个问题,我们将遵循以下步骤:
定义一个函数getMax(),它将接收x,
s := 将x转换为字符串
a := '9'
i := 0
当(i < s的长度 且 s[i] 等于 '9') 时,执行:
(i加1)
如果i < s的长度,则:
a := s[i]
对于初始化i := 0,当i < s的长度时,更新(i加1),执行:
如果s[i] 等于a,则:
s[i] := '9'
返回s作为数字
定义一个函数getMin(),它将接收x,
s := 将x转换为字符串
如果s[0]不等于'1',则:
a := s[0]
对于初始化i := 0,当i < s的长度时,更新(i加1),执行:
如果s[i] 等于a,则:
s[i] := '1'
否则
如果s的长度等于1,则:
返回1
i := 0
a := '1'
当(i < s的长度 且 s[i] <= '1') 时,执行:
(i加1)
如果i < s的长度,则:
a := s[i]
对于初始化i := 1,当i < s的长度时,更新(i加1),执行:
如果s[i] 等于a,则:
s[i] := '0'
返回s作为数字
在主方法中执行以下操作:
a := getMax(num)
b := getMin(num)
返回|a - b|
示例
让我们看看以下实现,以便更好地理解:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int getMax(int x){
string s = to_string(x);
char a = '9', b;
int i = 0;
while (i < s.size() && s[i] == '9')
i++;
if (i < s.size())
a = s[i];
for (int i = 0; i < s.size(); i++) {
if (s[i] == a) {
s[i] = '9';
}
}
return stoi(s);
}
int getMin(int x){
string s = to_string(x);
char a;
if (s[0] != '1') {
a = s[0];
for (int i = 0; i < s.size(); i++) {
if (s[i] == a) {
s[i] = '1';
}
}
}
else {
if (s.size() == 1) {
return 1;
}
int i = 0;
a = '1';
while (i < s.size() && s[i] <= '1')
i++;
if (i < s.size())
a = s[i];
for (int i = 1; i < s.size(); i++) {
if (s[i] == a) {
s[i] = '0';
}
}
}
return stoi(s);
}
int maxDiff(int num) {
int a = getMax(num);
int b = getMin(num);
return abs(a - b);
}
};
main(){
Solution ob;
cout << (ob.maxDiff(666));
}输入
666
输出
888
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP