สมมติว่าเรามีจำนวนเต็มที่ไม่ติดลบ เราสามารถสลับสองหลักได้สูงสุดหนึ่งครั้งเพื่อให้ได้จำนวนที่มีค่าสูงสุด เราต้องคืนค่าจำนวนสูงสุดที่ได้ ดังนั้นถ้าอินพุตคือ 2736 ผลลัพธ์จะเป็น 7236 ที่นี่เราสลับ 2 และ 7
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนต่อไปนี้ −
- num := ตัดแต่ละหลักจากจำนวน และทำเป็นรายการ
- num1 := เรียง num ในลำดับกลับ
- index := 0
- while index < ความยาวของ num
- ถ้า num1[index] ไม่เท่ากับ num[index]
- a := อาร์เรย์ย่อยของ num จาก index (index + 1) ถึงสุด
- กลับลำดับ a
- a := ความยาวของ a - index ของ num[index] ใน a + index + 1 - 1
- num[index], num[a] := num[a], num[index]
- break ลูป
- เพิ่ม index ขึ้น 1
- ถ้า num1[index] ไม่เท่ากับ num[index]
- รวมตัวเลขใน num และทำให้เป็นจำนวนเต็ม
- คืนค่าผลลัพธ์
ตัวอย่าง (Python)
มาดูการนำไปใช้เพื่อความเข้าใจที่ดีขึ้น −
class Solution:
def maximumSwap(self, num):
num = list(map(int, list(str(num))))
num1 = sorted(num, reverse=True)
index = 0
while index < len(num):
if num1[index] != num[index]:
a = num[index+1:]
a.reverse()
a = len(a) - a.index(num1[index]) + index + 1 - 1
num[index], num[a] = num[a], num[index]
break
index += 1
return int("".join(str(x) for x in num))
ob1 = Solution()
print(ob1.maximumSwap(5397))
อินพุต
5397
ผลลัพธ์
9357