输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。

例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

示例 1:

输入:n = 12
输出:5

示例 2:

输入:n = 13
输出:6

限制:

  • 1 <= n < 2^31

Python 解答:
1.暴力超时

class Solution:
    def countDigitOne(self, n: int) -> int:
        def count(n):
            c = 0
            while n > 0:
                n, r = divmod(n, 10)
                if r == 1:
                    c += 1
            return c 
        total = 0
        for i in range(1, n+1):
            total += count(i)
        return total

2.找规律

class Solution:
    def countDigitOne(self, n: int) -> int:
        if n == 0:
            return 0
        elif n <= 9:
            return 1
        m = n
        base = 1
        while m >= 10:
            m //= 10
            base *= 10
        l = n - base*m
        if m == 1:
            return self.countDigitOne(l) + self.countDigitOne(base-1) + 1 + l
        else:
            return self.countDigitOne(l) + m*self.countDigitOne(base-1) + base
最后修改日期: 2021年4月19日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。