题解 | #整数中1出现的次数(从1到n整数中1出现的次数)Python#
整数中1出现的次数(从1到n整数中1出现的次数)
http://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6
- 主要找规律,用base*round这个主要规律,base代表该位数的权重,round表示该数前面的值(表示在该位循环了多少次)。用weight表示该数值,former表示该数后面的值(只有当weight为1时有用)。
当weight = 1 时用 base * round+former+1
当weight = 0 时用 base * round
当weight > 1 时用 base * round+base
注意former的计算,用round对base取余计算
weight计算,用round对10取余
round每次要 对10除尽
base每次乘以10
class Solution: def NumberOf1Between1AndN_Solution(self, n): num, count, former, weight, base = n, 0, 0, 0, 1 while num != 0: weight = num % 10 former = n % base num = num // 10 if weight > 1: count += num * base + base elif weight == 1: count += num * base + former + 1 else: count += num * base base = base * 10 return count s = Solution() print(s.NumberOf1Between1AndN_Solution(13))