สมมติว่าเรามีสตริง s ที่มีตัวเลขอยู่บ้าง เราต้องตรวจสอบว่ามีตัวเลขจากมากไปหาน้อยติดต่อกันหรือไม่
ดังนั้น หากอินพุตเป็น s ="99989796" ผลลัพธ์จะเป็น True เนื่องจากสตริงนี้มีค่า [99,98,97,96]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้-
-
กำหนดฟังก์ชั่น helper() นี่จะใช้เวลา pos, prev_num
-
ถ้า pos เหมือนกับ n แล้ว
-
คืนค่า True
-
-
num_digits :=จำนวนหลักของ prev_num
-
สำหรับฉันอยู่ในช่วง num_digits - 1 ถึง num_digits ทำ
-
ถ้า s[จากดัชนี pos ถึง pos+i-1] และรูปแบบตัวเลขของ s[จากดัชนี pos ถึง pos+i-1]) เหมือนกับ prev_num - 1 ดังนั้น
-
ถ้าตัวช่วย (pos + i, prev_num - 1) แล้ว
-
คืนค่า True
-
-
คืนค่าเท็จ
-
จากวิธีหลัก ให้ทำดังนี้−
-
n :=ขนาดของ s
-
สำหรับผมอยู่ในช่วง 1 ถึงผลหารของ n/2 ทำ
-
num :=รูปแบบตัวเลขของ s[จากดัชนี 0 ถึง i-1]
-
ถ้า helper(i, num) เป็นจริง
-
คืนค่า True
-
-
คืนค่าเท็จ
-
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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