103 完美整数 | 豆包MarsCode AI刷题

65 阅读2分钟

问题描述

一个整数如果由相同的数字构成,则称为完美整数。例如:

  • 111333 是完美整数。
  • 1219101 是不完美整数。

现在,你需要计算给定区间 [x, y] 中有多少个整数是完美整数。

测试样例

样例1:

输入:x = 1 ,y = 10
输出:9

样例2:

输入:x = 2 ,y = 22
输出:10

解题思路

这道题目要求我们在给定区间[x,y] 中统计完美整数的数量。完美整数是指由相同的数字构成的整数。

  1. 遍历区间内的每一个整数。
  2. 对于每一个整数,检查它是否是由相同的数字组成的。
  3. 如果是,则计数器加一。

代码实现

def solution(x, y): 
    count = 0 
    for num in range(x, y + 1): 
        str_num = str(num) 
        if all(str_num.count(digit) == len(str_num) for digit in set(str_num)): 
        count += 1 
    return count 

if __name__ == "__main__":
    print(solution(1, 10) == 9)
    print(solution(2, 22) == 10)

知识点总结

  1. 字符串操作

    • 将整数转换为字符串:str(num)
    • 字符串的计数方法:str_num.count(digit)
    • 字符串的长度:len(str_num)
  2. 集合操作

    • 使用集合 set(str_num) 来去除字符串中的重复字符。
  3. 条件判断

    • 使用 all() 函数来判断所有字符是否满足某个条件。
  4. 循环

    • 使用 for 循环遍历给定区间 [x, y] 中的每一个整数。
  5. 计数器

    • 使用变量 count 来记录满足条件的整数的数量。

拓展知识

  1. 字符串的常用方法

    • str.isdigit():判断字符串是否只包含数字。
    • str.isalpha():判断字符串是否只包含字母。
    • str.isalnum():判断字符串是否只包含字母和数字。
    • str.startswith(prefix):判断字符串是否以某个前缀开头。
    • str.endswith(suffix):判断字符串是否以某个后缀结尾。
  2. 集合的常用方法

    • set.add(element):向集合中添加一个元素。
    • set.remove(element):从集合中移除一个元素。
    • set.union(other_set):返回两个集合的并集。
    • set.intersection(other_set):返回两个集合的交集。
    • set.difference(other_set):返回两个集合的差集。
  3. 条件表达式

    • Python 支持三元运算符:value_if_true if condition else value_if_false
    • 可以使用 any() 函数来判断是否存在满足条件的元素。
  4. 列表推导式

    • 可以使用列表推导式来简化代码,例如:[x for x in range(10) if x % 2 == 0]
  5. 生成器表达式

    • 生成器表达式类似于列表推导式,但更节省内存,例如:(x for x in range(10) if x % 2 == 0)