09 Sept 2026Go / Python / TypeScriptEasy

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
  • Python self-dividing-numbers/solution.py
  • TypeScript self-dividing-numbers/solution.ts

Solution files

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