Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาเวลาที่ใกล้ที่สุดโดยนำตัวเลขเดิมของเวลาที่กำหนดมาใช้ซ้ำใน python


สมมติว่าเรามีสตริง 24 ชั่วโมงในรูปแบบ "hh:mm" เราต้องหาเวลาที่ใกล้เคียงที่สุดถัดไปที่สามารถสร้างได้โดยใช้ตัวเลขที่กำหนดซ้ำ เราสามารถนำตัวเลขจากสตริงที่กำหนดมาใช้ซ้ำได้หลายครั้งตามต้องการ

ดังนั้น หากอินพุตเป็น s ="03:15" เอาต์พุตจะเป็น 03:30 น. ซึ่งเป็นเวลาที่ใกล้ที่สุด 03:30 น. ซึ่งจะซ้ำกับตัวเลขที่ระบุ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • use :=รายการที่มีค่าชั่วโมงสองหลักและนาทีสองหลัก
  • เป็นไปได้ :=ชุดใหม่
  • กำหนดฟังก์ชัน backtrack() นี่จะเป็นเส้นทาง
  • ถ้าขนาดของเส้นทางเท่ากับ 4 แล้ว
    • (เส้นทาง[สองหลักแรก] ต่อกัน ":" เชื่อมเส้นทาง[สองหลักสุดท้าย]) และแทรกลงในความเป็นไปได้
    • คืนสินค้า
  • สำหรับแต่ละ p ที่ใช้งาน ทำ
    • ถ้า (ขนาดของพาธเท่ากับ 0 และ p> "2") เป็นเท็จ และ (พาธเหมือนกับ "2" และ p> "3") เป็นเท็จ และ (ขนาดของพาธเท่ากับ 2 และ p> "5") เป็นเท็จ ดังนั้น
      • ย้อนกลับ(เส้นทาง + p)
  • จากวิธีหลัก ให้ทำดังนี้:
  • ย้อนรอย(สตริงว่าง)
  • เป็นไปได้ :=รายการใหม่จากที่เป็นไปได้
  • เรียงลำดับรายการได้
  • สำหรับ i ในช่วง 0 ถึงขนาดที่เป็นไปได้ - 2 ทำ
    • ถ้าเป็นไปได้[i] ก็เหมือนกับ s แล้ว
      • คืนได้[i + 1]
  • คืนได้[0]

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

ตัวอย่าง

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

อินพุต

"03:15"

ผลลัพธ์

03:30