leetcode刷题738单调递增的数字

738. 单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

当且仅当每个相邻位数上的数字 xy 满足 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))

你可能感兴趣的:(leetcode刷题738单调递增的数字)