Python程式:查詢所有數字均為奇數的n的最近數


假設我們有一個數字n,我們必須找到下一個最接近的值,其中所有數字都是奇數。當有兩個值與最接近n的值相同時,返回較大的值。

因此,如果輸入類似於n = 243,則輸出將為199。

為了解決這個問題,我們將遵循以下步驟:

  • first_even := -1
  • s := 將n轉換為字串
  • l := s的長度
  • 對於範圍0到l中的i:
    • 如果s[i]為偶數,則
      • first_even := 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
  • 否則
    • 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

更新於:2020年12月2日

523 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告