计算数字k在0到n中的出现的次数,k可能是0~9的一个值
样例
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)
标签: 枚举法
解答:
- assert()方法用来判断k, n 是否满足条件,满足判断条件继续运行,否则抛出异常。
- python中 range(0, n) 不包括n,这里使用了range(0, n+1)。
- while True循环会一直运行,直到运行到break 语句。
-
剩下的就是算法的思想:
- 首先,i是区间(0, n)中间的一个数。
- i 需要用来遍历整个区间(0, n),使用了 j = i 语句将 i 的值赋给 j 。
- 如果 j % 10 == k 成立, 说明 i 的个位是 k,result += 1。
如果 j % 10 == k 不成立,说明 i 的个位不是 k,直接运行 j = int(j/10) 来检查 i 的十位是不是k 。
- j = int(j/10) 会保留 i 的十位以上的数。
- while循环继续运行这时,知道数字 i 的每一位都检查完,跳出while 循环。
- 继续运行for 循环,检查整数 i + 1 。
class Solution: # @param k & n two integer # @return ans a integer def digitCounts(self, k, n): assert(n >= 0 and 0 <= k <= 9) result = 0 for i in range(0, n+1): j = i while True: if j % 10 == k: result += 1 j = int(j/10) if j == 0: break return result