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

Chương trình tìm thời gian gần nhất bằng cách sử dụng lại các chữ số giống nhau của thời gian nhất định trong python

Giả sử chúng ta có một chuỗi 24 giờ ở định dạng "hh:mm", chúng ta phải tìm thời gian gần nhất tiếp theo có thể được hình thành bằng cách sử dụng lại các chữ số đã cho. Chúng tôi có thể sử dụng lại các chữ số từ chuỗi đã cho bao nhiêu lần tùy ý.

Vì vậy, nếu đầu vào là s =​​"03:15", thì đầu ra sẽ là 03:30, vì thời điểm gần nhất là 03:30 lặp lại các chữ số đã cho.

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

  • use:=một danh sách có hai chữ số giờ và hai chữ số phút
  • có thể:=một tập hợp mới
  • Xác định hàm backtrack (). Điều này sẽ dẫn đường
  • nếu kích thước của đường dẫn bằng 4, thì
    • (path [hai chữ số đầu tiên] concatenate ":" nối đường dẫn [hai chữ số cuối]) và chèn nó vào có thể.
    • trở lại
  • đối với mỗi p được sử dụng, hãy thực hiện
    • nếu (kích thước của đường dẫn giống 0 và p> "2") là sai và (đường dẫn giống như "2" và p> "3") là sai và (kích thước của đường dẫn giống như 2 và p> "5") là sai, thì
      • nhạc nền (đường dẫn + p)
  • Từ phương thức chính, hãy làm như sau:
  • nhạc nền (chuỗi trống)
  • có thể:=một danh sách mới có thể có
  • sắp xếp danh sách có thể
  • đối với tôi trong phạm vi từ 0 đến kích thước có thể - 2, thực hiện
    • nếu có thể [i] giống với s, thì
      • có thể trả lại [i + 1]
  • có thể trả lại [0]

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

Ví dụ

class Solution:
   def solve(self, s):
      use = [s[0], s[1], s[3], s[4]]
      possible = set()

      def backtrack(path):
         nonlocal possible, use
         if len(path) == 4:
            possible.add(path[:2] + ":" + path[2:])
            return
         for p in use:
            if (not (len(path) == 0 and p > "2") and not (path == "2" and p > "3") and not (len(path) == 2 and p > "5")):
backtrack(path + p)

         backtrack("")
         possible = list(possible)
         possible.sort()
         for i in range(len(possible) - 1):
            if possible[i] == s:
               return possible[i + 1]
         return possible[0]

ob = Solution()
s = "03:15"
print(ob.solve(s))

Đầu vào

"03:15"

Đầu ra

03:30