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.