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

更新于:2020年11月17日

140 次查看

启动您的职业生涯

完成课程获得认证

开始
广告