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

本文介绍了一种算法,用于计算一个指定数字k在从0到n的整数范围内出现的总次数。通过遍历每个整数并检查其每位数字,实现了这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算数字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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值