青训营X豆包MarsCode 解题:完美整数 | 豆包MarsCode AI刷题

37 阅读2分钟

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.总结

以上是我对这道题的解法,主要运用字符串的性质,有更好的方法希望可以指教,谢谢你观看到这里,祝大家刷题顺利。