1.题目描述
问题描述
一个整数如果由相同的数字构成,则称为完美整数。例如:
- 1、11、333 是完美整数。
- 12、19、101 是不完美整数。
现在,你需要计算给定区间 [x, y] 中有多少个整数是完美整数。
示例1
输入:x = 1 ,y = 10 输出:9
示例2
输入:x = 2 ,y = 22 输出:10
难度等级
简单
题目链接
[](完美整数 - MarsCode)
2.解题思路
看到这道题第一想法就是判断个位十位百位等数字是否一样,但由于不确定位数,所以放弃这种解法,于是就想到了转化成字符,用索引遍历看是否有不一样的,然后再调用以上函数。
n=str(n)先把n变成字符串 ,再遍历字符串,只要有不一样的就返回False,即不是完美整数,遍历后都没有不一样的就返回True,即该数就是完美整数。
for i in range(len(n)):
if n[i]!=n[0]:
return False
return True
然后再在主函数中调用该函数,用count计数,在输入的俩个书中遍历(要注意for循环第二个index是取不了的,因此要用y+1),当该函数成立就表示有一个完美正整数,count加一,最后返回count。
count = 0
for i in range(x, y + 1):
if perfect(i):
count+=1
return count
- 字符串的索引访问和字符串的切片访问: 【头下标:尾下标】 ,这种访问方式称之为“切片”。但注意这是左闭右开的区间。在切片方式中,若头下标缺省,表示从字符串的开始取子串;若尾下标缺省,表示取到字符串的最后一个字符;若头下标和尾下标都缺省,则取整个字符串。 还可以设置取子字符串的顺序,格式为【头下标:尾下标:步长】。当步长大于0的时候,从左往右取字符;当步长小于0的时候,从右往左取字符。
3.代码实现
def perfect(n):
n=str(n)//转化为字符串
for i in range(len(n))://遍历字符串
if n[i]!=n[0]://只要有不一样的就返回False
return False
return True//遍历后没有不一样的就返回True
def solution(x, y):
# Edit your code here
count = 0//用count计数
for i in range(x, y + 1):
if perfect(i)://该函数成立就有一个完美正整数
count+=1
return count
if __name__ == "__main__":
# Add your test cases here
print(solution(1, 10)==9)
print(solution(2, 22) == 10)
4.总结
以上是我对这道题的解法,主要运用字符串的性质,有更好的方法希望可以指教,谢谢你观看到这里,祝大家刷题顺利。