整数中1出现的次数 牛客网 剑指Offer

整数中1出现的次数 牛客网 剑指Offer

  • 题目描述
  • 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
class Solution:
    #run:30ms memory:5720k
    def NumberOf1Between1AndN_Solution(self, n):
        k = 1
        if n < k:
            return 0
        count, m = 0, 1
        while m <= n:
            weight = n // m % 10
            count += (n // m) // 10 * m
            if weight == k:
                count += (n%m + 1)
            if weight > k:
                count += m
            m *= 10
        return count
    
    def NumberOf1Between1AndN_Solution2(self, n):
        k = 1
        if n < k:
            return 0
        count = 0
        base = 1
        r = n
        while r > 0:
            weight = r % 10
            r = r// 10
            count += r * base
            if weight == k:
                count += (n%base) + 1
            elif weight > k:
                count +=base
            base *= 10
        return count
    
    def NumberOf1Between1AndN_Solution3(self, n):
        k = 1
        ones, m = 0, 1
        while m <= n:
            ones += (n // m + 9 - k ) // 10 * m + (n // m % 10 == k) * (n % m + 1)
            m *= 10
        return ones

 

posted @ 2018-09-11 01:28  vercont  阅读(74)  评论(0编辑  收藏  举报