Сложность: hard
Преобразуйте неотрицательное целое число num в его словесное представление на английском языке.
Пример:
Input: num = 123
Output: "One Hundred Twenty Three"
👨💻 Алгоритм:
1⃣Обработка чисел до 20 и кратных 10 до 90:
Создать массивы или словари для чисел от 1 до 19 и для кратных 10 от 20 до 90.
Если число попадает в эти диапазоны, сразу вернуть соответствующее словесное представление.
2⃣Обработка сотен, тысяч, миллионов и миллиардов:
Разделить число на группы по три цифры (единицы, тысячи, миллионы, миллиарды).
Для каждой группы сформировать словесное представление с использованием рекурсивной функции для чисел от 1 до 999.
3⃣Формирование окончательного результата:
Собрать словесное представление всех групп, добавив соответствующие суффиксы (тысячи, миллионы, миллиарды).
Соединить все части в одну строку, удалив лишние пробелы.
😎 Решение:
class Solution {
private $belowTwenty = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"];
private $tens = ["", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"];
private $thousands = ["", "Thousand", "Million", "Billion"];
function numberToWords($num) {
if ($num == 0) return "Zero";
$result = "";
$i = 0;
while ($num > 0) {
if ($num % 1000 != 0) {
$result = $this->helper($num % 1000) . $this->thousands[$i] . " " . $result;
}
$num = intval($num / 1000);
$i++;
}
return trim($result);
}
private function helper($num) {
if ($num == 0) return "";
else if ($num < 20) return $this->belowTwenty[$num] . " ";
else if ($num < 100) return $this->tens[intval($num / 10)] . " " . $this->helper($num % 10);
else return $this->belowTwenty[intval($num / 100)] . " Hundred " . $this->helper($num % 100);
}
}Ставь 👍 и забирай 📚 Базу знаний