LeetCode:728. Self Dividing Numbers(找出範圍內自除數)

文章最前: 我是Octopus,這個名字來源於我的中文名--章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的動態,一起學習,共同進步。

相關文章:

  1. LeetCode:55. Jump Game(跳遠比賽)
  2. Leetcode:300. Longest Increasing Subsequence(最大增長序列)
  3. LeetCode:560. Subarray Sum Equals K(找出數組中連續子串和等於k)

文章目錄:

題目描述:

java實現方法1:

python實現方式1:

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)


github源碼地址:https://github.com/zhangyu345293721/leetcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章