Skip to the content.

leetcode [面试题43] 1~n整数中1出现的次数


Contact me:

Blog -> https://cugtyt.github.io/blog/index
Email -> cugtyt@qq.com
GitHub -> Cugtyt@GitHub


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

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

示例 1:

输入:n = 12
输出:5

示例 2:

输入:n = 13
输出:6

来自题解:

一个数中1的个数包括三部分:

class Solution:
    def countDigitOne(self, n: int) -> int:
        def dfs(n):
            if n <= 0: return 0
            ns = str(n)
            high = int(ns[0])
            power = 10**(len(ns) - 1)
            last = n - high * power
            common = high * dfs(power - 1) + dfs(last)

            if high == 1: 
                return common + last + 1
            else:
                return common + power

        return dfs(n)