剑指 Offer 43. 1~n整数中1出现的次数(数学)

Description

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

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

示例 1:

输入:n = 12
输出:5
示例 2:

输入:n = 13
输出:6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution

根据题解手动用三维数字模拟一下就明白了。

class Solution:
    def countDigitOne(self, n: int) -> int:
        lens=len(str(n))
        count=0
        for i in range(lens):
            digit=10**i #当前位置所在的位(是十分位,百分位,还是千分位等)
            high=n//(digit*10) #高于当前位的数字
            low=n%digit #低于当前位的数字
            cur=(n//digit)%10 #当前位置的数字
            if cur==0: #当前位为0
                count+=high*digit
            elif cur==1: #当前为为1
                count+=high*digit+low+1
            else: #当前位大于1
                count+=(high+1)*digit
        return count

作者:blaoke
链接:https://leetcode-cn.com/problems/number-of-digit-one/solution/python-tong-su-yi-dong-jie-fa-by-blaoke/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode,算法----数值)