吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1476|回复: 3
收起左侧

[Python 转载] 2.LeetCode刷题-自除数

[复制链接]
语欣老爹 发表于 2022-2-6 01:58
本帖最后由 语欣老爹 于 2022-2-6 10:24 编辑

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

自除数
自除数是指可以被它包含的每一位数除尽的数。也可以理解为,自除数对组成其本身的每一位数字进行取余结果都为0。需要注意,自除数不允许包含 0 。
例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。


题目:现在,给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。请尝试编程解决


筛选自除数
1、首先将这个数的每一个数字提取出来。
2、检查数字中是否存在0,如果存在,则判定不是自除数。
3、使用原数对每一位数字进行除法运算,判定是否存在余数非零结果。

方案一、
[Python] 纯文本查看 复制代码
def yyds(left,right):
    l=[]
    for num in range(left,right+1):
        numStr=str(num)
        numList=list(str(num))
        res=True
        for item in numList:
            itemNum=int(item)
            if itemNum==0:
                res=False
                break
            if num % itemNum !=0:
                res=False
        if res:
            l.append(num)
    return lprint(yyds(1,100))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22, 24, 33, 36, 44, 48, 55, 66, 77, 88, 99]


优化方案二
[Python] 纯文本查看 复制代码
def yyds(left,right):
    l=[num for num in range(left,right+1) if([item for item in list(str(num)) if(int(item)!=0 and num % int(item)==0)]==list(str(num)))]
    return l
print(yyds(1,100))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22, 24, 33, 36, 44, 48, 55, 66, 77, 88, 99]


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

免费评分

参与人数 2吾爱币 +2 收起 理由
dingyx99 + 1 用心讨论,共获提升!
夫子点灯 + 1 谢谢@Thanks!

查看全部评分

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

slbcmgn 发表于 2022-2-6 09:00
学习经验哈,谢谢
dingyx99 发表于 2022-2-6 09:52
小能维尼 发表于 2022-2-6 16:00
本帖最后由 小能维尼 于 2022-2-6 16:01 编辑

不是,把代码全写一行是什么操作??
我当初写C语言也是这么搞,还用三元式简化。
但是不具有可读性啊!代码写给人看,谢谢!!
可能是我不懂太多,但是不易读,是真的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 10:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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