LeetcodeMedium-【面試題43. 1~n整數中1出現的次數】

輸入一個整數 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

注意:本題與主站 233 題相同:https://leetcode-cn.com/problems/number-of-digit-one/

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路1:規律

主要思路就是:
根據題目要求實際上就是求n以內的所有數的每一位上的1的個數和,那麼可以直接考慮個位上爲1時有多少個數(n1)、十位上爲1的有多少個數(n2)…然後結果就是這些個數相加即可,結果爲 n1 + n2 + …
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

class Solution:
    def countDigitOne(self, n: int) -> int:
        d = 1
        r = n % 10
        l, h = 0, n // 10
        ans = 0
        while h != 0 or r != 0:
            if r == 0:
                ans += h * d
            elif r == 1:
                ans += h * d + l + 1
            else:
                ans += (h + 1) * d
            # print(h, l, r, d)
            l = r * d + l
            r = h % 10
            h = h // 10
            d *= 10
        return ans
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章