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.
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.
O((right - left + 1) * log right) time and O(1) auxiliary space excluding output.
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
}
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
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;
}