首页
社区
课程
招聘
[原创]1.LeetCode刷题-阿姆斯特朗数
发表于: 2022-2-5 23:07 12515

[原创]1.LeetCode刷题-阿姆斯特朗数

2022-2-5 23:07
12515

阿姆斯特朗数其实是一种自幂数,三位的阿姆斯特朗数又被称为水仙花数。水仙花数的名字来自于一个凄美的神话故事,美少年纳西索斯苦苦追求自己的倒影最终化作一朵晶莹剔透的水仙花。之后,纳西索斯的名字(Narcissus)就成了“自我欣赏”的代名词,用水仙花数来称呼3位的自幂数,或许要有些描述“自赏”的味道。

一位的自幂数又称独身数。
三位的自幂数又称水仙花数。
四位的自幂数又称四叶玫瑰数。
五位的自幂数又称五角星数。
六位的自幂数又称六合数。
七位的自幂数又称北斗七星数。
八位的自幂数又称八仙数。
九位的自幂数又称九九重阳数。
十位的自幂数又称十全十美数。

如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。

给你一个正整数 N,让你来判定他是否是阿姆斯特朗数,是 则返回 true,不是 则返回 false。

例如:153 是一个 3 位数,且 153 = 1^3 + 5^3 + 3^3

1、首先将一个数中的每一位数字提取出来。

2、将提取出来的每一位数字与当前数本身的位数进行指数运算并且累加。比较累加的结果与数字本身是否相同。

优化方案二、 12行

优化方案三、10行

优化方案四、8行

优化方案五 7行

 
 
 
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]
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]
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
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
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))
def Test(N):

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-2-5 23:08 被洪七公.编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 2119
活跃值: (1890)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
优化代码 六 

test2 = lambda N:sum(map(lambda x: int(x)**len(str(N)),str(N))) == N
print(test2(153))
2022-2-6 01:44
1
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
3
楼主牛逼!感谢分享!
不过我想要提出一点小想法,代码行数的减少并不是算法优化的目的,运行效率的提高才是最关键的,而lambda并不能使得代码的运行效率提高
2022-2-17 17:46
0
雪    币: 1802
活跃值: (3595)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4

(defn test1 [n]
 (let [a (map #(java.lang.Integer/parseInt %) (clojure.string/split (str n) #""))
       b (count a)]
   (if (= n (reduce + (map #(reduce * (repeat b %)) a))) true false)))
 
#四行,clojure

最后于 2022-2-21 16:10 被中国小孩大人编辑 ,原因:
2022-2-21 15:53
0
游客
登录 | 注册 方可回帖
返回
//