#273
Hard Algorithms Integer to english words
Math String Recursion
34.8% acceptance
Jan 12, 2026
3837
6834
Convert a non-negative integer num to its English words representation.
Solution
Rust
Time O(2^n)
Space O(n)
impl Solution {
pub fn number_to_words(num: i32) -> String {
if num == 0 {
return "Zero".to_string();
}
let ones = vec!["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"];
let teens = vec!["Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"];
let tens = vec!["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"];
let thousands = vec!["", "Thousand", "Million", "Billion"];
fn helper(num: i32, ones: &[&str], teens: &[&str], tens: &[&str]) -> String {
if num == 0 {
return String::new();
} else if num < 10 {
return ones[num as usize].to_string();
} else if num < 20 {
return teens[(num - 10) as usize].to_string();
} else if num < 100 {
let ten = num / 10;
let one = num % 10;
let mut result = tens[ten as usize].to_string();
if one > 0 {
result.push(' ');
result.push_str(ones[one as usize]);
}
return result;
} else {
let hundred = num / 100;
let rest = num % 100;
let mut result = ones[hundred as usize].to_string();
result.push_str(" Hundred");
if rest > 0 {
result.push(' ');
result.push_str(&helper(rest, ones, teens, tens));
}
return result;
}
}
let mut result = Vec::new();
let mut num = num;
let mut group = 0;
while num > 0 {
if num % 1000 != 0 {
let part = helper(num % 1000, &ones, &teens, &tens);
if !thousands[group].is_empty() {
result.push(format!("{} {}", part, thousands[group]));
} else {
result.push(part);
}
}
num /= 1000;
group += 1;
}
result.reverse();
result.join(" ")
}
}