Leetcode738单调递增的数字
思路:单调递增也就是 我们从当前数字开始往后的数字都要大,所以存在一个,如果下一个数字比当前数字小的问题,同时这里也存在我们是从前往后遍历呢,还是从后往前遍历呢?
贪心算法:如果出现nums[I-1] > nums[I]的情况,首先想到的就是把nums[i-1]退到i-2的位置,然后把nums[i]的值赋值为9,这就可以保证是一个单调递增的数
所以我们需要首先把每个数字切割开,然后转换成str的形式,然后判断的时候用int函数去尽行判断。
全局最优:得到小于等于N的最大单调递增的整数。
但这里局部最优推出全局最优,还需要其他条件,即遍历顺序,和标记从哪一位开始统一改成9。
代码:
def monotoneIncreasingDigits(self, n: int) -> int:
a = list(str(n))
for i in range(len(a)-1,0,-1):
if int(a[i]) < int(a[i-1]):
a[i-1] = str(int(a[i-1])-1)
a[i:] = "9" * (len(a)-i)
print(a)
return int("".join(a))
Leetcode968
做不来 。。。跳过了
leetcode714留到二刷再来吧