Welcome to Subscribe On Youtube

728. Self Dividing Numbers

Description

A self-dividing number is a number that is divisible by every digit it contains.

  • For example, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 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

Solutions

  • class Solution {
        public List<Integer> selfDividingNumbers(int left, int right) {
            List<Integer> ans = new ArrayList<>();
            for (int i = left; i <= right; ++i) {
                if (check(i)) {
                    ans.add(i);
                }
            }
            return ans;
        }
    
        private boolean check(int num) {
            for (int t = num; t != 0; t /= 10) {
                int x = t % 10;
                if (x == 0 || num % x != 0) {
                    return false;
                }
            }
            return true;
        }
    }
    
  • class Solution {
    public:
        vector<int> selfDividingNumbers(int left, int right) {
            vector<int> ans;
            for (int i = left; i <= right; ++i)
                if (check(i))
                    ans.push_back(i);
            return ans;
        }
    
        bool check(int num) {
            for (int t = num; t; t /= 10) {
                int x = t % 10;
                if (x == 0 || num % x) return false;
            }
            return true;
        }
    };
    
  • class Solution:
        def selfDividingNumbers(self, left: int, right: int) -> List[int]:
            return [
                num
                for num in range(left, right + 1)
                if all(i != '0' and num % int(i) == 0 for i in str(num))
            ]
    
    
  • func selfDividingNumbers(left int, right int) []int {
    	check := func(num int) bool {
    		for t := num; t != 0; t /= 10 {
    			x := t % 10
    			if x == 0 || num%x != 0 {
    				return false
    			}
    		}
    		return true
    	}
    
    	var ans []int
    	for i := left; i <= right; i++ {
    		if check(i) {
    			ans = append(ans, i)
    		}
    	}
    	return ans
    }
    
  • impl Solution {
        pub fn self_dividing_numbers(left: i32, right: i32) -> Vec<i32> {
            let mut res = vec![];
            for i in left..=right {
                let mut num = i;
                if (
                    loop {
                        if num == 0 {
                            break true;
                        }
                        let j = num % 10;
                        if j == 0 || i % j != 0 {
                            break false;
                        }
                        num /= 10;
                    }
                ) {
                    res.push(i);
                }
            }
            res
        }
    }
    
    
  • function selfDividingNumbers(left: number, right: number): number[] {
        const check = (x: number): boolean => {
            for (let y = x; y; y = Math.floor(y / 10)) {
                if (y % 10 === 0 || x % (y % 10) !== 0) {
                    return false;
                }
            }
            return true;
        };
        return Array.from({ length: right - left + 1 }, (_, i) => i + left).filter(check);
    }
    
    

All Problems

All Solutions