738. Monotone Increasing Digits
局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]–,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。
全局最优:得到小于等于N的最大单调递增的整数。
但这里局部最优推出全局最优,还需要其他条件,即遍历顺序,和标记从哪一位开始统一改成9。
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
digits = list(str(n))
flag = None # flag用来标记赋值9从哪里开始
for i in range(len(digits) - 1, 0, -1):
if int(digits[i]) < int(digits[i - 1]):
flag = i
digits[i - 1] = str(int(digits[i - 1]) - 1)
if flag != None:
digits[flag:] = ['9'] * (len(digits) - flag)
return int(''.join(digits))