《小C的好数》| 豆包MarsCode AI刷题

51 阅读1分钟

笔记:小C的好数

问题描述

QQ浏览器截图20241118104429.png

输入输出

  • 输入:一个整数 n,表示我们要检查的数字范围的上限。
  • 输出:一个整数,表示从1到 n(包括 n)之间好数的数量。

算法设计

  1. 初始化计数器:创建一个计数器 count 来记录好数的数量。
  2. 遍历数字:使用一个循环遍历从1到 n 的所有数字。
  3. 转换为字符串:将每个数字转换为字符串,以便能够检查它的字符。
  4. 获取唯一字符:使用集合(set)来获取字符串中的唯一字符。
  5. 检查唯一字符数量:如果唯一字符的数量不超过2,那么这个数字就是一个好数,计数器 count 加1。

代码实现

def solution(n: int) -> int:
    count = 0  # 初始化好数的计数器
    
    for x in range(1, n + 1):
        s = str(x)             # 将数字转换为字符串
        unique = set(s)        # 获取数字中不同的字符
        if len(unique) <= 2:  # 如果不同字符数量 <= 2
            count += 1         # 计数器加1
            
    return count

测试样例

  • 测试样例1solution(110) 返回 102
  • 测试样例2solution(1000) 返回 352
  • 测试样例3solution(1) 返回 1

总结

这个算法通过遍历给定范围内的所有数字,并检查每个数字的位数中不同字符的数量,来计算好数的数量。它的时间复杂度是 O(n * k),其中 n 是输入的上限,k 是数字的平均位数。通过豆包MarsCode AI 刷题平台,可以帮助我系统地学习和提高编程技能,是提升算法能力的有效途径。