สมมติว่าเรามีตัวเลข n เราต้องหาจำนวนที่มากที่สุดให้น้อยกว่าหรือเท่ากับ n โดยที่ตัวเลขทั้งหมดไม่ลดลง
ดังนั้น หากอินพุตเท่ากับ n =221 เอาต์พุตจะเป็น 199
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- หลัก :=รายการที่มีตัวเลขทั้งหมดเป็น n
- ถูกผูกไว้ :=null
- สำหรับ i ในขนาดช่วงของตัวเลข - 1 ลงเหลือ 0, ทำ
- ถ้า digits[i]
- ผูกพัน :=ฉัน
- หลัก[i - 1] :=หลัก[i - 1] - 1
- ถ้า digits[i]
- ถ้าการผูกมัดไม่เป็นโมฆะ
- สำหรับ i ในช่วงที่ผูกกับขนาดของหลัก ทำ
- หลัก[i] :=9
- สำหรับ i ในช่วงที่ผูกกับขนาดของหลัก ทำ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
class Solution: def solve(self, n): digits = [int(x) for x in str(n)] bound = None for i in range(len(digits) - 1, 0, -1): if digits[i] < digits[i - 1]: bound = i digits[i - 1] -= 1 if bound: for i in range(bound, len(digits)): digits[i] = 9 return int("".join(map(str, digits))) ob = Solution() n = 221 print(ob.solve(n))
อินพุต
221
ผลลัพธ์
199