Python程式:查詢所有數字均為奇數的n的最近數
假設我們有一個數字n,我們必須找到下一個最接近的值,其中所有數字都是奇數。當有兩個值與最接近n的值相同時,返回較大的值。
因此,如果輸入類似於n = 243,則輸出將為199。
為了解決這個問題,我們將遵循以下步驟:
- first_even := -1
- s := 將n轉換為字串
- l := s的長度
- 對於範圍0到l中的i:
- 如果s[i]為偶數,則
- first_even := i
- 退出迴圈
- 如果s[i]為偶數,則
- 如果first_even等於-1,則
- 返回n
- big := s(從索引0到i)的數值 + 1
- 如果s[i]等於"0",則
- 如果s[i - 1]等於"1",則
- small := s(從索引0到i)的數值 - 1
- 否則
- small := s(從索引0到i)的數值 - 11
- 如果s[i - 1]等於"1",則
- 否則
- small := s(從索引0到i)的數值 - 1
- 對於範圍i + 1到l中的i:
- big := big連線"1"
- small := small連線"9"
- big := big的數值,small := small的數值
- d2 := big - n,d1 := n - small
- 如果d1 < d2,則
- 返回small
- 否則(如果d1 >= d2),則
- 返回big
讓我們看看下面的實現,以便更好地理解:
示例
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
廣告