สมมุติว่าเรามีตัวเลข n เราต้องหาค่าถัดไปที่ใกล้เคียงที่สุดโดยที่ตัวเลขทั้งหมดเป็นเลขคี่ เมื่อมีค่าสองค่าที่ผูกกับ n มากที่สุด ให้คืนค่าที่มากกว่า
ดังนั้น หากอินพุตเท่ากับ n =243 เอาต์พุตจะเป็น 199
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- first_even :=-1
- s :=n เป็นสตริง
- l :=ขนาดของ s
- สำหรับฉันในช่วง 0 ถึง l ทำ
- ถ้า s[i] เป็นคู่ ดังนั้น
- first_even :=ฉัน
- ออกมาจากวงจร
- ถ้า s[i] เป็นคู่ ดังนั้น
- ถ้า first_even เหมือนกับ -1 แล้ว
- ส่งคืน n
- ใหญ่ :=1 + ค่าตัวเลขของ s[จากดัชนี 0 ถึง i]
- ถ้า s[i] เหมือนกับ "0" แล้ว
- ถ้า s[i - 1] เหมือนกับ "1" แล้ว
- เล็ก :=ค่าตัวเลขของ s[จากดัชนี 0 ถึง i] - 1
- มิฉะนั้น
- เล็ก :=ค่าตัวเลขของ s[จากดัชนี 0 ถึง i] - 11
- ถ้า s[i - 1] เหมือนกับ "1" แล้ว
- มิฉะนั้น
- เล็ก :=ค่าตัวเลขของ s[จากดัชนี 0 ถึง i] - 1
- สำหรับฉันในช่วง i + 1 ถึง l ทำ
- ใหญ่ :=ใหญ่ต่อกัน "1"
- เล็ก :=เล็กต่อกัน "9"
- ใหญ่ :=ค่าตัวเลขของใหญ่ เล็ก :=ค่าตัวเลขของเล็ก
- d2 :=ใหญ่ - n, d1 :=n - เล็ก
- ถ้า d1
- ผลตอบแทนน้อย
- ผลตอบแทนมหาศาล
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, n): first_even = -1 s = str(n) l = len(s) for i in range(l): if int(s[i]) % 2 == 0: first_even = i break if first_even == -1: return n big = str(int(s[: i + 1]) + 1) if s[i] == "0": if s[i - 1] == "1": small = str(int(s[: i + 1]) - 1) else: small = str(int(s[i : i + 1]) - 11) else: small = str(int(s[: i + 1]) - 1) for i in range(i + 1, l): big += "1" small += "9" big, small = int(big), int(small) d2 = big - n d1 = n - small if d1 < d2: return small elif d1 >= d2: return big ob = Solution() n = 243 print(ob.solve(n))
อินพุต
243
ผลลัพธ์
199