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