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

โปรแกรมตรวจสอบว่าสตริงมีตัวเลขเรียงลำดับลดลงติดกันหรือไม่ใน Python

สมมติว่ามีสตริง s ที่ประกอบด้วยตัวเลข เราต้องตรวจสอบว่ามันมีตัวเลขจำนวนเต็มที่เรียงลดลงติดกันหรือไม่

เช่น ถ้าอินพุตคือ s = "99989796" ผลลัพธ์จะเป็น True เนื่องจากสตริงนี้ประกอบด้วย [99,98,97,96]

ขั้นตอนการแก้ปัญหา

  • กำหนดฟังก์ชัน helper() รับ pos, prev_num
    • ถ้า pos == n คืนค่า True
    • num_digits := จำนวนหลักของ prev_num
    • for i ในช่วง num_digits-1 ถึง num_digits
      • ถ้า s[pos:pos+i] และ int(s[pos:pos+i]) == prev_num - 1 ถ้า helper(pos+i, prev_num-1) คืนค่า True
    • คืนค่า False
  • จากเมธอดหลัก n := len(s) for i ใน 1 ถึง n//2 num := int(s[:i]) ถ้า helper(i, num) คืนค่า True
  • คืนค่า False

ตัวอย่างโค้ด

class Solution:
    def solve(self, s):
        n = len(s)
        def helper(pos, prev_num):
            if pos == n:
                return True
            num_digits = len(str(prev_num))
            for i in range(num_digits - 1, num_digits + 1):
                if s[pos:pos+i] and int(s[pos:pos+i]) == prev_num - 1:
                    if helper(pos + i, prev_num - 1):
                        return True
            return False
        for i in range(1, n//2 + 1):
            num = int(s[:i])
            if helper(i, num):
                return True
        return False

ob = Solution()
s = "99989796"
print(ob.solve(s))

อินพุต

"99989796"

เอาต์พุต

True