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
- 從bound到digits大小迴圈:
- 如果digits[i] < digits[i - 1],則
- 將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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP