Giả sử chúng ta có một số n, chúng ta phải tìm giá trị gần nhất tiếp theo mà tất cả các chữ số đều lẻ. Khi có hai giá trị được ràng buộc vì gần nhau nhất với n, hãy trả về giá trị lớn hơn.
Vì vậy, nếu đầu vào là n =243, thì đầu ra sẽ là 199.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- first_even:=-1
- s:=n dưới dạng chuỗi
- l:=kích thước của s
- đối với tôi trong phạm vi từ 0 đến l, thực hiện
- nếu s [i] chẵn thì
- first_even:=i
- ra khỏi vòng lặp
- nếu s [i] chẵn thì
- nếu first_even giống -1, thì
- return n
- big:=1 + giá trị số của s [từ chỉ số 0 đến i]
- nếu s [i] giống "0" thì
- nếu s [i - 1] giống với "1", thì
- small:=giá trị số của s [từ chỉ số 0 đến i] - 1
- nếu không,
- small:=giá trị số của s [từ chỉ số 0 đến i] - 11
- nếu s [i - 1] giống với "1", thì
- nếu không,
- small:=giá trị số của s [từ chỉ số 0 đến i] - 1
- đối với tôi trong phạm vi từ i + 1 đến l, thực hiện
- big:=big concatenate "1"
- small:=small concatenate "9"
- big:=giá trị số của lớn, nhỏ:=giá trị số của nhỏ
- d2:=big - n, d1:=n - small
- nếu d1
- trả lại nhỏ
- trở lại lớn
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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))
Đầu vào
243
Đầu ra
199