问题描述
一个整数如果由相同的数字构成,则称为完美整数。例如:
1、11、333是完美整数。12、19、101是不完美整数。
现在,你需要计算给定区间 [x, y] 中有多少个整数是完美整数。
测试样例
样例1:
输入:
x = 1 ,y = 10
输出:9
样例2:
输入:
x = 2 ,y = 22
输出:10
解题思路
这道题目要求我们在给定区间[x,y] 中统计完美整数的数量。完美整数是指由相同的数字构成的整数。
- 遍历区间内的每一个整数。
- 对于每一个整数,检查它是否是由相同的数字组成的。
- 如果是,则计数器加一。
代码实现
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)
知识点总结
-
字符串操作:
- 将整数转换为字符串:
str(num) - 字符串的计数方法:
str_num.count(digit) - 字符串的长度:
len(str_num)
- 将整数转换为字符串:
-
集合操作:
- 使用集合
set(str_num)来去除字符串中的重复字符。
- 使用集合
-
条件判断:
- 使用
all()函数来判断所有字符是否满足某个条件。
- 使用
-
循环:
- 使用
for循环遍历给定区间[x, y]中的每一个整数。
- 使用
-
计数器:
- 使用变量
count来记录满足条件的整数的数量。
- 使用变量
拓展知识
-
字符串的常用方法:
str.isdigit():判断字符串是否只包含数字。str.isalpha():判断字符串是否只包含字母。str.isalnum():判断字符串是否只包含字母和数字。str.startswith(prefix):判断字符串是否以某个前缀开头。str.endswith(suffix):判断字符串是否以某个后缀结尾。
-
集合的常用方法:
set.add(element):向集合中添加一个元素。set.remove(element):从集合中移除一个元素。set.union(other_set):返回两个集合的并集。set.intersection(other_set):返回两个集合的交集。set.difference(other_set):返回两个集合的差集。
-
条件表达式:
- Python 支持三元运算符:
value_if_true if condition else value_if_false。 - 可以使用
any()函数来判断是否存在满足条件的元素。
- Python 支持三元运算符:
-
列表推导式:
- 可以使用列表推导式来简化代码,例如:
[x for x in range(10) if x % 2 == 0]。
- 可以使用列表推导式来简化代码,例如:
-
生成器表达式:
- 生成器表达式类似于列表推导式,但更节省内存,例如:
(x for x in range(10) if x % 2 == 0)。
- 生成器表达式类似于列表推导式,但更节省内存,例如: