สมมติว่าเรามีตัวเลข n เราต้องการหาค่าที่ใกล้ที่สุดซึ่งตัวเลขทุกหลักเป็นจำนวนคี่ เมื่อมีค่าสองค่าที่ห่างเท่ากัน ให้คืนค่าที่มากกว่า
เช่น ถ้าอินพุตเป็น n = 243 ผลลัพธ์จะเป็น 199
ขั้นตอนการแก้ปัญหา
first_even := -1s := nเป็นสตริงl := len(s)- วนลูปหาตัวเลขคู่ตัวแรกใน s
- ถ้าไม่พบตัวเลขคู่ คืนค่า n
- คำนวณค่า
big(ค่ามากกว่า) และsmall(ค่าน้อยกว่า) โดยปรับตัวเลขหลักที่เป็นคู่ - เติม 1 ให้ big และ 9 ให้ small สำหรับหลักที่เหลือ
- เปรียบเทียบระยะทาง และคืนค่าที่ใกล้กว่า (หรือค่ามากกว่าถ้าเท่ากัน)
ตัวอย่างโค้ด
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