738. 单调递增的数字
给定一个非负整数 N
,找出小于或等于 N
的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
当且仅当每个相邻位数上的数字 x
和 y
满足 x <= y
时,我们称这个整数是单调递增的。
示例 1:
输入: N = 10
输出: 9
示例 2:
输入: N = 1234
输出: 1234
示例 3:
输入: N = 332
输出: 299
class Solution:
def monotoneIncreasingDigits(self, N: int) -> int:
'''
从后往前查找,如果前面的数大于后面的数,则前面的数-1,后面的数全变为9,保证最大
比起从前往后查找,不用考虑第一次非递增的数-1之后,和前面的数是否还是递增序列
'''
digits = list(str(N))
n = len(digits)
for i in range(n - 2, -1, -1):
if digits[i] > digits[i+1]:
digits[i] = str(int(digits[i]) - 1)
digits[i+1:] = '9' * (n-i-1) # 从i+1 到 n-1总共有n-1-(i+1)+1个数
return int(''.join(digits))