สมมุติว่าเรามีเลขจำนวนเต็ม เราจะใช้ขั้นตอนต่อไปนี้สองครั้งพอดีขั้นตอนคือ -
-
เลือกตัวเลข 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