吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1664|回复: 7
收起左侧

[Python 转载] 1.LeetCode刷题-阿姆斯特朗数

[复制链接]
语欣老爹 发表于 2022-2-5 23:11
本帖最后由 语欣老爹 于 2022-2-5 23:17 编辑

采用每日一练的方式学习思考解题思路,探寻优化方法。

有趣的自幂数
阿姆斯特朗数其实是一种自幂数,三位的阿姆斯特朗数又被称为水仙花数。水仙花数的名字来自于一个凄美的神话故事,美少年纳西索斯苦苦追求自己的倒影最终化作一朵晶莹剔透的水仙花。之后,纳西索斯的名字(Narcissus)就成了“自我欣赏”的代名词,用水仙花数来称呼3位的自幂数,或许要有些描述“自赏”的味道。
一位的自幂数又称独身数。
三位的自幂数又称水仙花数。
四位的自幂数又称四叶玫瑰数。
五位的自幂数又称五角星数。
六位的自幂数又称六合数。
七位的自幂数又称北斗七星数。
八位的自幂数又称八仙数。
九位的自幂数又称九九重阳数。
十位的自幂数又称十全十美数。

阿姆斯特朗数
如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
给你一个正整数 N,让你来判定他是否是阿姆斯特朗数,是 则返回 true,不是 则返回 false。
例如:153 是一个 3 位数,且 153 = 1^3 + 5^3 + 3^3

判断阿姆斯特朗数
1、首先将一个数中的每一位数字提取出来。
[Python] 纯文本查看 复制代码
def Test(N):
    tmp=N
    list=[]
    while tmp / 10.0 >0:
        s=tmp % 10
        list.append(s)
        tmp=tmp // 10
    print(list)
 
Test(123)
[3, 2, 1]


2、将提取出来的每一位数字与当前数本身的位数进行指数运算并且累加。比较累加的结果与数字本身是否相同。
[Python] 纯文本查看 复制代码
def Test(N):
    tmp=N
    list=[]
    while tmp / 10.0 >0:
        s=tmp % 10
        list.append(s)
        tmp=tmp // 10
    sum = 0   
    for item in list:
        sum+=item**len(list)
    if sum == N:
        return True
    else:
        return False
print(Test(153))
 
True


优化方案二、 12行
[Python] 纯文本查看 复制代码
def Test(N):
    tmp=N
    list=[]
    while tmp / 10.0 >0:
        s=tmp % 10
        list.append(s)
        tmp=tmp // 10
    sum = 0   
    for item in list:
        sum+=item**len(list)
    return sum == N
print(Test(253))


优化方案三、10行
[Python] 纯文本查看 复制代码
def test2(N):
    strN=str(N)
    list=[]
    for item in strN:
        list.append(item)
    sum=0
    for item in list:
        sum+=int(item)**len(list)
    return sum == N
print(test2(153))


优化方案四、8行
[Python] 纯文本查看 复制代码
def test2(N):
    strN=str(N)
    list=[item for item in strN]
    sum=0
    for item in list:
        sum+=int(item)**len(list)
    return sum == N
print(test2(153))


优化方案五 7行
[Python] 纯文本查看 复制代码
ef test2(N):
    list1=list(str(N))
    sum=0
    for item in list1:
        sum+=int(item)**len(list1)
    return sum == N
print(test2(153))


还有更简洁的代码吗?请贴出来














发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

santus36 发表于 2022-2-6 00:10
def test2(N):
    list1=list(str(N))
    return sum(map(lambda x: int(x)**len(list1),list1)) == N
print(test2(153))
santus36 发表于 2022-2-6 00:08
santus36 发表于 2022-2-6 00:13
test2 = lambda N:sum(map(lambda x: int(x)**len(str(N)),str(N))) == N
print(test2(153))
 楼主| 语欣老爹 发表于 2022-2-6 01:44
santus36 发表于 2022-2-6 00:13
test2 = lambda N:sum(map(lambda x: int(x)**len(str(N)),str(N))) == N
print(test2(153))

感谢分享
sht281 发表于 2022-2-6 10:11
多谢分享
zm55555 发表于 2022-2-6 10:46
蛮好的,谢谢分享
椎名真白 发表于 2022-2-7 00:21
[Python] 纯文本查看 复制代码
number = 153
print(sum(map(lambda x: int(x)**len(str(number)),list(str(number)))) == number)

我感觉优化方案二和四已经够了
不用写的那么短,更加的易读才是关键
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表