笔记:小C的好数
问题描述
输入输出
- 输入:一个整数
n,表示我们要检查的数字范围的上限。 - 输出:一个整数,表示从1到
n(包括n)之间好数的数量。
算法设计
- 初始化计数器:创建一个计数器
count来记录好数的数量。 - 遍历数字:使用一个循环遍历从1到
n的所有数字。 - 转换为字符串:将每个数字转换为字符串,以便能够检查它的字符。
- 获取唯一字符:使用集合(
set)来获取字符串中的唯一字符。 - 检查唯一字符数量:如果唯一字符的数量不超过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
测试样例
- 测试样例1:
solution(110)返回102。 - 测试样例2:
solution(1000)返回352。 - 测试样例3:
solution(1)返回1。
总结
这个算法通过遍历给定范围内的所有数字,并检查每个数字的位数中不同字符的数量,来计算好数的数量。它的时间复杂度是 O(n * k),其中 n 是输入的上限,k 是数字的平均位数。通过豆包MarsCode AI 刷题平台,可以帮助我系统地学习和提高编程技能,是提升算法能力的有效途径。