Skip to main content
Back to problems
#728
Easy Algorithms

Self dividing numbers

Math
80.6% acceptance
Feb 21, 2026
1925
384
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] (both inclusive).

Solution

Rust
Time O(n)
Space O(1)
LeetCode
solution.rs
/*
 * 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] (both inclusive).
 * 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
 */
impl Solution {
  pub fn self_dividing_numbers(left: i32, right: i32) -> Vec<i32> {
    (left..=right).filter(|&n| {
      let mut x = n;
      while x > 0 {
        let d = x % 10;
        if d == 0 || n % d != 0 { return false; }
        x /= 10;
      }
      true
    }).collect()
  }
}