8/23 每日一題(檢查數字是否可以被自身整除ex:12可被1和2整除, 但不可包含0)
A self-dividing number is a number that is divisible by every digit it contains.
- For example,
128is a self-dividing number because128 % 1 == 0,128 % 2 == 0, and128 % 8 == 0.
A self-dividing number is not allowed to contain the digit zero.
Given two integers left and right, return a list of all the self-dividing numbers in the range [left, right].
Example 1:
Input: left = 1, right = 22 Output: [1,2,3,4,5,6,7,8,9,11,12,15,22]
Example 2:
Input: left = 47, right = 85 Output: [48,55,66,77]
Constraints:
1 <= left <= right <= 104
class Solution:
def selfDividingNumbers(self, left: int, right: int) -> List[int]:
res=[]
for i in range(left,right+1):
n=0
if i % 10 ==0:
continue#下一圈
if i < 13:
res.append(i)
else:
long=len(str(i))
while n < long:
if int(str(i)[n])==0 or i % int(str(i)[n])!=0:
break #不可整除 跳出
n+=1
if n == long: #正常檢查完每一項
res.append(i)
return res
#成功執行完表示為自整除數字
-----------------------------------參考答案class Solution:
def selfDividingNumbers(self, left: int, right: int) -> List[int]:
res=[]
for i in range(left, right+1):
n=i
b=True
while(n):
dig=n%10
if not dig or i%dig: #如果dig=0 或是i%dig不整除 b=False結束迴圈
b=False
break
n=n//10
if b:
res.append(i)
return res
----------------------class Solution:
def selfDividingNumbers(self, left: int, right: int) -> List[int]:
output = []
for i in range(left, right + 1):
if self.check(i):
output.append(i)
return output
def check(self, n):
temp = n
while temp:
r = temp % 10
if r == 0:
return False
if n % r != 0:
return False
temp = temp // 10
return True
標籤: leetcode

0 個意見:
張貼留言
訂閱 張貼留言 [Atom]
<< 首頁