算法学习笔记--7.digit-counts

来源:互联网 发布:linux ftp限制ip访问 编辑:程序博客网 时间:2024/05/29 13:06

计算数字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 语句。
  • 剩下的就是算法的思想:


    1. 首先,i是区间(0, n)中间的一个数。
    2. i 需要用来遍历整个区间(0, n),使用了 j = i 语句将 i 的值赋给 j 。
    3. 如果 j % 10 == k 成立, 说明 i 的个位是 k,result += 1。
      如果 j % 10 == k 不成立,说明 i 的个位不是 k,直接运行 j = int(j/10) 来检查 i 的十位是不是k 。
    4. j = int(j/10) 会保留 i 的十位以上的数。
    5. while循环继续运行这时,知道数字 i 的每一位都检查完,跳出while 循环。
    6. 继续运行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
    原创粉丝点击