สมมุติว่าเรามีเลขจำนวนเต็ม เราจะใช้ขั้นตอนต่อไปนี้สองครั้งพอดีขั้นตอนคือ -
-
เลือกตัวเลข x ในช่วง 0 ถึง 9
-
เลือกตัวเลข y อื่นในช่วง 0 ถึง 9 ด้วย ตัวเลข y สามารถเท่ากับ x ได้
-
แทนที่การเกิดขึ้นทั้งหมดของ x ในการแทนค่าทศนิยมของ num ด้วย 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'
-
ผม :=0
-
ในขณะที่ (i <ขนาดของ s และ s[i] เท่ากับ '9') ทำ -
-
(เพิ่ม i ขึ้น 1)
-
-
ถ้าฉัน <ขนาดของ s แล้ว −
-
a :=s[i]
-
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า s[i] เหมือนกับ a แล้ว −
-
s[i] :='9'
-
-
-
ส่งคืน s เป็นตัวเลข
-
กำหนดฟังก์ชัน getMin() ซึ่งจะใช้เวลา x
-
s :=แปลง x เป็นสตริง
-
ถ้า s[0] ไม่เท่ากับ '1' ดังนั้น −
-
a :=s[0]
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า s[i] เหมือนกับ a แล้ว −
-
s[i] :='1'
-
-
-
-
มิฉะนั้น
-
ถ้าขนาดของ s เท่ากับ 1 แล้ว −
-
กลับ 1
-
-
ผม :=0
-
a :='1'
-
ในขณะที่ (i <ขนาดของ s และ s[i] <='1'), ทำ −
-
(เพิ่ม i ขึ้น 1)
-
-
ถ้าฉัน <ขนาดของ s แล้ว −
-
a :=s[i]
-
-
สำหรับการเริ่มต้น 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