Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm số không lớn hơn n trong đó tất cả các chữ số đều không giảm trong python

Giả sử chúng ta có một số n, chúng ta phải tìm số lớn nhất nhỏ hơn hoặc bằng n mà tất cả các chữ số đều không giảm.

Vì vậy, nếu đầu vào là n =221, thì đầu ra sẽ là 199.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:

  • chữ số:=một danh sách có tất cả các chữ số trong n
  • ràng buộc:=null
  • đối với tôi trong phạm vi kích thước chữ số - 1 xuống 0, thực hiện
    • nếu các chữ số [i]
    • ràng buộc:=i
    • chữ số [i - 1]:=chữ số [i - 1] - 1
  • nếu ràng buộc không phải là null, thì
    • đối với tôi trong phạm vi liên kết với kích thước của các chữ số, hãy thực hiện
      • chữ số [i]:=9
  • nối từng chữ số thành các chữ số để tạo thành một số và trả lại nó
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

    Mã mẫu

    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))

    Đầu vào

    221

    Đầu ra

    199