#3747
Medium Algorithms Count distinct integers after removing zeros
Math Dynamic Programming
22.4% acceptance
Feb 25, 2026
117
10
You are given a positive integer n.
For every integer x from 1 to n, we write down the integer obtained by removing all zeros from the decimal representation of x.
Return an integer denoting the number of distinct integers written down.
Solution
Rust
Time O(n)
Space O(1)
impl Solution {
pub fn count_distinct(n: i64) -> i64 {
let s: Vec<u8> = n.to_string().bytes().map(|b| b - b'0').collect();
let len = s.len();
let mut result = 0i64;
// d-digit zero-free numbers: 9^d each, for d < len
for d in 1..len {
result += 9i64.pow(d as u32);
}
// d-digit zero-free numbers <= n (tight DP)
let mut valid = true;
for i in 0..len {
let d = s[i];
let free = (len - i - 1) as u32;
if d >= 1 {
result += (d as i64 - 1) * 9i64.pow(free);
}
if d == 0 { valid = false; break; }
}
if valid { result += 1; }
result
}
}