在Python中找出数字不超过n的数字,其中所有数字都不会降序
假设我们有一个数字n,我们必须找到最大的不大于n的数字,其中所有数字都不会降序。
因此,如果输入为n = 221,则输出将为199。
要解决此问题,我们将遵循以下步骤:
- digits:具有n中所有数字的列表
- bound :空
- 对于i的范围由digits长度减1到0,执行以下操作
- 如果digits[i] < digits[i – 1],则
- bound := i
- digits[i – 1] := digits[i – 1] – 1
- 如果bound不为空,则
- 对于i的范围是从绑定到digits大小,执行以下操作
- digits[i] := 9
- 如果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