LeetCode 738. (每一位数呈现)单调递增的数字(Medium)

在这里插入图片描述
【题目链接】

题解

  1. 1111……累加法

思路

在这里插入图片描述

代码

class Solution:
    ### 1215 逆序遍历(超时)
    def monotoneIncreasingDigits(self, N: int) -> int:
        def fun(num):
            last, num = num % 10, num // 10

            while num != 0:
                if last < num % 10: return False
                else:
                    last = num % 10
                    num //= 10

            return True

        while N >= 0:
            if fun(N): return N
            else: N -= 1

    ### 1215 找规律:以1为底数相加进行判断(36 ms,14.8 MB)
    def monotoneIncreasingDigits(self, N: int) -> int:
        # base是根据题目要求N的最大值10^9而来,即9位数
        base, res = 111111111, 0

        # 根据位数的个数来执行循环,最多9次(不满9位数的N,会多执行几个无效循环,此时base已经为0)
        for _ in range(9):
            # 通过循环来找到小于当前N的 最大的 base
            while base + res > N:
                base //= 10

            res += base
        
        return res
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值