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 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.