Day 37 | 贪心算法06

85 阅读1分钟

738. 单调递增的数字

注意到如果有不满足的,就会把后面的数改成9

def monotoneIncreasingDigits(self, n: int) -> int:
    num = []
    while n > 9:
        num.append(n%10)
        n = n // 10
    num.append(n)
    num = num[::-1]
    
    # 找到目前能满足递增的数
    for i in range(len(num)-2,-1,-1):
        if num[i] > num[i+1]:
            num[i+1] = 9
            num[i] -= 1
            ind = i + 1
            while ind < len(num) - 1:
                ind += 1
                num[ind] = 9

    res = 0
    j = 0

    for i in range(len(num)-1,-1,-1):
        res += num[i] * (10 ** j)
        j += 1
    
    return res

改进:

if int(a[i]) < int(a[i-1]):
                a[i-1] = str(int(a[i-1]) - 1)
                a[i:] = '9' * (len(a) - i)  #python不需要设置flag值,直接按长度给9就好了

968. 监控二叉树

(待补)

贪心总结

局部最优推出全局最优

用贪心的方法的话,有把全局分解到局部的思路

对一些中等难度的题,贪心和动规的思路是可以互通的

复杂的题,用贪心的思想可以提升性能