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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。