LeetCode算法题-Self Dividing Number

作者: 程序员小川 | 来源:发表于2019-04-13 23:28 被阅读51次

    这是悦乐书的第305次更新,第324篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是728)。自分割数是一个可被其包含的每个数字整除的数字。例如,128是自分割数,因为128%1 == 0,128%2 == 0,128%8 == 0。此外,不允许自分割数包含数字零。给定数字的下限和上限,输出每个可能的自分割数的数组,如果可能,包括边界。例如:

    输入:left = 1,right = 22

    输出:[1,2,3,4,5,6,7,8,9,11,12,15,22]

    注意:每个输入参数的边界是1 <= left <= right <= 10000。

    本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

    02 第一种解法

    此题要求找出给定范围内所有符合要求的自分割数,直接将题目意思翻译过来就行,单独写了一个判断是否是自分割数的判断方法。

    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i=left; i<=right; i++) {
            if (isSelfDividing(i)) {
                list.add(i);
            }
        }
        return list;
    }
    
    public boolean isSelfDividing(int num){
        char[] arr = (num+"").toCharArray();
        for (char ch : arr) {
            if (ch == '0' || num%(ch-'0') != 0) {
                return false;
            }
        }
        return true;
    }
    

    03 第二种解法

    我们也可以直接在一个方法里面完成,第一种解法是转成字符数组来判断,此解法是利用取余和整除结合来取每一位数。

    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i=left; i<=right; i++) {
            int num = 0;
            for (num=i; num>0; num/=10) {
                if (num%10 == 0 || i%(num%10) != 0) {
                    break;
                }
            }
            if (num == 0) {
                list.add(i);
            }
        }
        return list;
    }
    

    04 小结

    算法专题目前已日更超过五个月,算法题文章173+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

    相关文章

      网友评论

        本文标题:LeetCode算法题-Self Dividing Number

        本文链接:https://www.haomeiwen.com/subject/ajpdwqtx.html