代码随想录算法训练营day37|Leetcode738/968/714

Leetcode738单调递增的数字

738. 单调递增的数字 - 力扣(Leetcode)

代码随想录算法训练营day37|Leetcode738/968/714_第1张图片

思路:单调递增也就是 我们从当前数字开始往后的数字都要大,所以存在一个,如果下一个数字比当前数字小的问题,同时这里也存在我们是从前往后遍历呢,还是从后往前遍历呢? 

贪心算法:如果出现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留到二刷再来吧

你可能感兴趣的:(leetcode,leetcode)