DevAdvent 2022
Как найти максимально возможное число в JavaScript
Или о массивах, строках и функциях сортировки
Сегодняшняя задача DevAdvent — это упражнение в упорядочении чисел. Но с интересным вариантом: вам нужно разбить число и использовать его цифры, чтобы получить максимально возможное число. В некотором смысле это связано с двумя предыдущими задачами (Как получить минимум или максимум массива в JavaScript и TypeScript и 5 способов преобразовать число в строку в JavaScript)
Проблема
ссылка на Кату
Ваша задача состоит в том, чтобы создать функцию, которая может принимать любое неотрицательное целое число в качестве аргумента и возвращать его с цифрами в порядке убывания. По сути, переставьте цифры, чтобы получить максимально возможное число.
Примеры: Вход: 42145
Выход: 54421
Вход: 145263
Выход: 654321
Вход: 123456789
Выход: 987654321
Мое решение
Решение, которое я предлагаю, разбито на 5 шагов.
1. Преобразовать число в строку (это необходимо, потому что число не повторяется)
const str: string = "" + n;
2. Преобразовать строку в массив символов
const strArray: string[] = [...str];
3. Отсортируйте массив символов
const sortedArray: string[] = strArray.sort((a, b) => +b - +a);
4. Присоединяйтесь к массиву символов
const arrayJoined: string = sortedArray.join("");
5. Преобразуйте строку в число
const result = +arrayJoined;
Соединяя различные части вместе, я получаю эту функцию
export function descendingOrder(n: number): number { const str: string = "" + n; const strArray: string[] = [...str]; const sortedArray: string[] = strArray.sort((a, b) => +b - +a); const arrayJoined: string = sortedArray.join(""); return +arrayJoined; }
Я могу написать более сжатую версию, объединив различные шаги в один.
export const descendingOrder = (x: number): number => +[...("" + x)].sort((a, b) => +b - +a).join("");
Начиная с этой версии я могу получить эквивалент в JavaScript.
export const descendingOrder = (x) => +[...("" + x)].sort((a, b) => +b - +a).join("");
Я остановлюсь здесь на сегодня. Сегодня девятая годовщина моего первого свидания с женой. На сегодня хватит кода. Время провести день с моей невестой.
Спасибо за прочтение! Оставайтесь с нами, чтобы узнать больше.
Не пропустите мою следующую статью — подпишитесь на мой средний список адресов электронной почты
Больше контента на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.
Заинтересованы в масштабировании запуска вашего программного обеспечения? Посмотрите Цирк.
Мы предлагаем бесплатные консультации экспертов и индивидуальные решения, которые помогут вам повысить осведомленность о вашем технологическом продукте или услуге и принять их.