728. Self Dividing Numbers

原题链接:https://leetcode.com/problems/self-dividing-numbers/description/
看到这道题目,我想到的最直接最简单的方法:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.int2Array(35));
        System.out.println(s.selfDividingNumbers(1, 22));
    }

    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> res = new ArrayList<>();
        for (int i = left; i <= right; i++) {
            boolean isDividingNumber = true;
            for (Integer temp : int2Array(i)) {
                if (temp == 0 || i % temp != 0) {
                    isDividingNumber = false;
                    break;
                }
            }
            if (isDividingNumber) {
                res.add(i);
            }
        }
        return res;
    }

    private Set<Integer> int2Array(int item) {
        Set<Integer> res = new HashSet<>();
        while (item >= 10) {
            res.add(item % 10);
            item = item / 10;
        }
        res.add(item);
        return res;
    }
}

虽然是通过了,但是时间复杂度和空间复杂度稍微高一点。看一下官方给出的暴力的答案吧,虽然时间复杂度和空间复杂度和我的差不多,但是代码要简洁点:

import java.util.ArrayList;
import java.util.List;

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.selfDividingNumbers(1, 22));
    }

    public List<Integer> selfDividingNumbers(int left, int right) {
        List<Integer> res = new ArrayList<>();
        for (int i = left; i <= right; i++) {
            if (check(i)) {
                res.add(i);
            }
        }
        return res;
    }

    private boolean check(int item) {
        for (char c : String.valueOf(item).toCharArray()) {
            if (c == '0' || item % (c - '0') > 0) {
                return false;
            }
        }
        return true;
    }
}
原文地址:https://www.cnblogs.com/optor/p/8588495.html