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