Re: [闲聊] 每日leetcode

楼主: yam276 ('_')   2024-08-07 14:23:43
※ 引述《enmeitiryous (enmeitiryous)》之铭言:
: 273. Integer to English Words
: 题目:
: 给你一个2^32-1到0之间的一个整数,把他转换成英文描述法,例如123->One Hundred
: Twenty Three,以及101->One Hundred One,不是口语会说的One hundred and One
一半看答案跟思路解的
因为英文很机掰
所以要分成 <20 20~99 100~999 这些区间
Code:
impl Solution {
pub fn number_to_words(num: i32) -> String {
if num == 0 {
return "Zero".to_string();
}
let below_20 = vec![
"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"
, "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen",
"Seventeen", "Eighteen", "Nineteen"
];
let tens = vec![
"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty",
"Seventy", "Eighty", "Ninety"
];
let thousands = vec![
"", "Thousand", "Million", "Billion"
];
fn helper(num: i32, below_20: &Vec<&str>, tens: &Vec<&str>) -> String
{
if num == 0 {
return "".to_string();
} else if num < 20 {
return below_20[num as usize].to_string() + " ";
} else if num < 100 {
return tens[(num / 10) as usize].to_string() + " " + &helper(
num % 10, below_20, tens);
} else {
return below_20[(num / 100) as usize].to_string() + " Hundred
" + &helper(num % 100, below_20, tens);
}
}
let mut num = num;
let mut result = String::new();
let mut i = 0;
while num > 0 {
if num % 1000 != 0 {
result = helper(num % 1000, &below_20, &tens) + thousands[i] +
" " + &result;
}
num /= 1000;
i += 1;
}
result.trim().to_string()
}
}
作者: Smallsh (Smallsh)   2024-08-07 14:33:00
大师
作者: nh60211as   2024-08-07 14:34:00
大师
作者: oin1104 (是oin的说)   2024-08-07 14:43:00
大师
作者: dont   2024-08-07 15:31:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com