Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Self Dividing Numbers

List every number in a range that is divisible by each of its digits and contains no zero digit.

Test each candidate by repeatedly extracting its final digit and rejecting zero or non-dividing digits.

Complexity

O((right - left + 1) * log right) time and O(1) auxiliary space excluding output.

Solution files

Go•self-dividing-numbers/solution.go
package main

func selfDividingNumbers(left int, right int) []int {
	result := []int{}
	for value := left; value <= right; value++ {
		remaining, valid := value, true
		for remaining > 0 {
			digit := remaining % 10
			if digit == 0 || value%digit != 0 {
				valid = false
				break
			}
			remaining /= 10
		}
		if valid {
			result = append(result, value)
		}
	}
	return result
}
Python•self-dividing-numbers/solution.py
class Solution:
    def selfDividingNumbers(self, left: int, right: int) -> list[int]:
        result: list[int] = []
        for value in range(left, right + 1):
            remaining = value
            while remaining:
                digit = remaining % 10
                if digit == 0 or value % digit: break
                remaining //= 10
            else: result.append(value)
        return result
TypeScript•self-dividing-numbers/solution.ts
function selfDividingNumbers(left: number, right: number): number[] {
  const result: number[] = [];
  for (let value = left; value <= right; value += 1) {
    let remaining = value;
    let valid = true;
    while (remaining > 0) { const digit = remaining % 10; if (digit === 0 || value % digit !== 0) { valid = false; break; } remaining = Math.floor(remaining / 10); }
    if (valid) result.push(value);
  }
  return result;
}