Python程式:查詢所有數字非遞減且不大於n的數字


假設我們有一個數字n,我們需要找到小於或等於n的最大的數字,其中所有數字都是非遞減的。

例如,如果輸入是n = 221,則輸出將是199。

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

  • digits := 包含n中所有數字的列表
  • bound := null
  • 從digits大小減1到0迴圈:
    • 如果digits[i] < digits[i - 1],則
      • bound := i
      • digits[i - 1] := digits[i - 1] - 1
    • 如果bound不為空,則
      • 從bound到digits大小迴圈:
        • digits[i] := 9
  • 將digits中的每個數字連線起來形成一個數字並返回。

讓我們看看下面的實現來更好地理解。

示例程式碼

線上演示

class Solution:
   def solve(self, n):
      digits = [int(x) for x in str(n)]
      bound = None
      for i in range(len(digits) - 1, 0, -1):
         if digits[i] < digits[i - 1]:
            bound = i
            digits[i - 1] -= 1
         if bound:
            for i in range(bound, len(digits)):
               digits[i] = 9
         return int("".join(map(str, digits)))

ob = Solution()
n = 221
print(ob.solve(n))

輸入

221

輸出

199

更新於:2020年11月25日

225 次檢視

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.