- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/self-dividing-numbers/description/open in new window
Aself-dividing number is a number that is divisible by every digit it contains.
Forexample, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0.
Also, a self-dividing number is not allowed to contain the digit zero.
Given a lower and upper number bound, output a list of every possible self dividing number, including the bounds if possible.
Example 1:
Input:
left = 1, right = 22
Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
Note:
The boundaries of each input argument are 1 <= left <= right <= 10000.
如果一个数字能被它自己的各位数字整除,那么这个数字是一个自除数字,求在[left, right]双闭区间内的所有自除数字。
用了两个函数,一个用来判断是否是dividing number,另一个用来循环和遍历。
要注意的一点是要判断0是否在num中,否则有除0错误。
dividing number 判断的有点麻烦,就是遍历每位数字。
class Solution:
def isDividingNumber(self, num):
if '0' in str(num):
return False
return 0 == sum(num % int(i) for i in str(num))
def selfDividingNumbers(self, left, right):
"""
:type left: int
:type right: int
:rtype: List[int]
"""
answer = []
for num in range(left, right+1):
print(num)
if self.isDividingNumber(num):
answer.append(num)
return answer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
参考了https://leetcode.com/problems/self-dividing-numbers/discuss/109445。 有更简单的两个函数: all()判断是不是所有的元素都满足, filter过滤掉不满足条件的元素。
class Solution(object):
def selfDividingNumbers(self, left, right):
is_self_dividing = lambda num: '0' not in str(num) and all([num % int(digit) == 0 for digit in str(num)])
return filter(is_self_dividing, range(left, right + 1))
1 2 3 4
Aspointed out by @ManuelP, [num % int(digit) == 0 for digit in str(num)] creates an entire list which is not necessary. By leaving out the [ and ], we can make use of generators which are lazy and allows for short-circuit evaluation, i.e. all will terminate as soon as one of the digits fail the check.
Theanswer below improves the run time from 128 ms to 95 ms:
class Solution(object):
def selfDividingNumbers(self, left, right):
is_self_dividing = lambda num: '0' not in str(num) and all(num % int(digit) == 0 for digit in str(num))
return filter(is_self_dividing, range(left, right + 1))
1 2 3 4
转成字符串的方法耗时,其实可以直接使用数字求余的方法节省了大量的时间。
时间复杂度是O(N),空间复杂度是O(1)。打败98%.
class Solution:
def selfDividingNumbers(self, left, right):
"""
:type left: int
:type right: int
:rtype: List[int]
"""
res = []
for num in range(left, right + 1):
if self.isDividing(num):
res.append(num)
return res
def isDividing(self, num):
temp = num
while temp:
div = temp % 10
if not div or num % div != 0:
return False
temp //= 10
return True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
我使用 scipy.stats.spearmanr(a,b) 我得到: Warning: divide by zero encountered in divide 操作正确结束,但显示警告。 a 和
我使用 , 比如 .我认为使用 like 没问题.然而,有时不显示。 我用了在 ,但是 未显示。我应该只使用 吗?在 ? 如果有人遇到与我相同的问题,请分享您解决此问题的经验。 这是我的代码
I am trying to divide a very large even number 13144131834269512219260941993714669605006625743172006
我向 Mongo DB 创建了一个请求: { $project: { difference: { $subtract:
我有一个 JavaFX 应用程序 拆分 Pane .我想禁用 分隔线 在 拆分 Pane ,因此在应用程序运行时无法更改其位置。我怎样才能做到这一点? 最佳答案 没有 API,所以一旦显示了场景,我们
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我尝试做一个简单的 Swing 窗,但布局并不容易...我的意思是我只想要一个有 3 个面板的窗口: 标题占窗口高度的 20% 内容占窗口高度的 60% 页脚占窗口高度的 20% 但我无法成功拥有我想
我正在尝试替换字符串中的字符。假设字符串是: "yaaaaaaaay:axaxaxaxa:yaaaaaaay" 我希望java将:之后的所有a更改为X,直到下一个:。所以它看起来像这样: "yaaaa
我在下面的代码中尝试 Perl 的 PDL: #!/usr/bin/perl -w use strict; use PDL::Core qw(pdl); use PDL::Math qw(isfin
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 7 年前。 我在使用 BigDecimal 执行除法时得到不正确的结果。数字1 = 22
只是一个简单的问题,我无法理解,希望你们能帮忙。 我有一个div (带有 ID),单击时将打开一个新的 div - 很好,效果很好,我真正想要的是“填充”新的 div带有基于单击的 div ID 的预
我正在使用 BigDecimal 进行一些浮点运算。如果将 5 除以 4.2,您将得到一个异常(因为结果有一个不能用 BigDecimal 表示的非终止扩展) )即 BigDecimal five =
我的目标是获得类似于下图所示的分隔线: Goal Picture Divider 我需要在 LinearLayout 之间放置一个水平和垂直分隔线 这是我的用户界面 XML 代码:
我正在尝试以 Angular Testing 弹出组件,但我不知道为什么当我启动测试时出现错误: 'mat-divider' is not a known element: 1. If 'mat-di
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我知道 md-divider 用于 md-list 但我希望它在 flex-layout 中 例如: 应该在两个 div 之间有一个水平分隔线,对于另一种情况
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
当我尝试除以 0 时,以下代码没有捕获异常。我需要抛出异常,还是计算机会在运行时自动抛出异常? int i = 0; cin >> i; // what if someone enters zero
这个问题在这里已经有了答案: Division by zero: Undefined Behavior or Implementation Defined in C and/or C++? (8 个
我的代码将以这种方式工作: input : a[]="create /dir/bar" 并保存在这个字符串中: b[]=create c[]=/dir/bar 还有一种情况是我保存了另外一个字符串:
我是一名优秀的程序员,十分优秀!