在Python中找出数字不超过n的数字,其中所有数字都不会降序

在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中的每个数字以组成一个数字并返回它

让我们查看以下实现,以更好地理解:

示例代码

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程