文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。
相關文章:
- LeetCode:55. Jump Game(跳遠比賽)
- Leetcode:300. Longest Increasing Subsequence(最大增長序列)
- LeetCode:560. Subarray Sum Equals K(找出數組中連續子串和等於k)
文章目錄:
github源碼地址:https://github.com/zhangyu345293721/leetcode
題目描述:
自除數 是指可以被它包含的每一位數除盡的數。
例如,128 是一個自除數,因爲 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。
還有,自除數不允許包含 0 。
給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的自除數。
示例 1:
輸入: 上邊界left = 1, 下邊界right = 22
輸出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
注意:
每個輸入參數的邊界滿足 1 <= left <= right <= 10000。
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
java實現方法1:
/**
* 找出自除數
*
* @param left 左邊輸入
* @param right 右邊輸入
* @return list鏈表
*/
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list = new ArrayList<>();
for (int i = left; i <= right; i++) {
boolean flag = judgeSelfDiving(i);
if (flag) {
list.add(i);
}
}
return list;
}
/**
* 判斷一個數字是不是自除數
*
* @param i 輸入數
* @return 布爾值
*/
private boolean judgeSelfDiving(int i) {
boolean flag = true;
int temp = i;
while (i > 0) {
int num = i % 10;
i = i / 10;
if (num == 0 || temp % num != 0) {
flag = false;
}
}
return flag;
}
時間複雜度:O(n)
空間複雜度:O(1)
python實現方式1:
# -*- coding:utf-8 -*-
'''
獲取自除數
author:zhangyu
date:2020/1/14
'''
from typing import List
def judge_dividing_number(i: int) -> bool:
'''
判斷是不是自除數
Args:
i: 輸入數
Returns:
布爾值
'''
flag = True
temp = i
while i > 0:
num = i % 10
i = i // 10
if num == 0 or temp % num != 0:
flag = False
return flag
def self_dividing_numbers(left: int, right: int) -> List[int]:
'''
找出自除數
Args:
left: 左邊
right: 右邊
Returns:
list鏈表
'''
dividing_num_list = []
for i in range(left, right + 1):
flag = judge_dividing_number(i)
if flag:
dividing_num_list.append(i)
return dividing_num_list
if __name__ == '__main__':
left = 1
right = 20
print(self_dividing_numbers(left, right))
時間複雜度:O(n)
空間複雜度:O(1)