Вопрос:
Create a function that takes a positive integer and returns the next bigger number that can be formed by rearranging its digits. For example: 12 ==> 21 513 ==> 531 2017 ==> 2071 If the digits can't be rearranged to form a bigger number, return -1 (or nil in Swift, None in Rust): 9 ==> -1 111 ==> -1 531 ==> -1 export function nextBigger(n: number): number { тут код }
Ответ ассистента
Привет! Сейчас помогу тебе написать функцию, которая находит следующее большее число, образованное перестановкой цифр заданного числа.
```typescript export function nextBigger(n: number): number { // 1. Преобразуем число в массив цифр. const digits = String(n).split('').map(Number); const len = digits.length;
// 2. Находим первую цифру справа, которая меньше предыдущей. let i = len - 2; while (i >= 0 && digits[i] >= digits[i + 1]) { i--; }
// 3. Если такой цифры нет, значит, перестановка невозможна. if (i < 0) { return -1; }
// 4. Находим наименьшую цифру справа от digits[i], которая больше digits[i]. let j = len - 1; while (digits[j] <= digits[i]) { j--; }
// 5. Меняем местами digits[i] и digits[j]. [digits[i], digits[j]] = [digits[j], digits[i]];
// 6. Сортируем часть массива справа от digits[i] в порядке возрастания. const rightPart = digits.splice(i + 1).sort((a, b) => a - b);
// 7. Соединяем все части обратно и преобразуем в число. const result = Number(digits.concat(rightPart).join(''));
return result; } ```
Как это работает:
- Преобразование в массив цифр: Сначала мы преобразуем исходное число n в массив отдельных цифр. Это нужно, чтобы было удобно манипулировать цифрами.
- Поиск "точки перегиба": Мы ищем первую цифру справа, которая меньше, чем цифра справа от неё. Это место, где можно сделать перестановку, чтобы получить большее число. Если такой цифры нет, это значит, что все цифры идут в порядке убывания (или одинаковые), и следующее большее число получить нельзя.
- Поиск подходящей цифры для обмена: Мы ищем наименьшую цифру справа от найденной "точки перегиба", которая больше, чем цифра в "точке перегиба".
- Обмен и сортировка: Меняем местами найденные цифры и сортируем все цифры справа от "точки перегиба" в порядке возрастания. Это гарантирует, что мы получим следующее большее число.
- Соединение и результат: Соединяем все части массива обратно в число и возвращаем его.
Пример:
Пусть n = 513.
- digits = [5, 1, 3]
- i = 1 (потому что 1 < 3)
- j = 2 (потому что 3 > 1)
- После обмена: digits = [5, 3, 1]
- Сортируем [1] -> [1]
- Результат: 531
Другие решения
Что ещё задавали пользователи
-
1. Установите соответствие между содержанием обучения и разделами содержания обучения в 9 классе . Выберите ВСЕ верные соответствия: выберите несколько вариантов ответа 1) Правовые основы государства – Государство и право 2) Система образования в Российской Федерации – Культура. Образование и наука 3) Правовые основы государства – Экономика 4) Государственный герб Российской Федерации – Символы государства 5) Роль семьи в жизни человека и общества – Россия на пути в будущее 6) Россия - страна возможностей – Россия на пути в будущее
Показать ответ -
Практическая работа № 12. ИНДИВИДУАЛЬНЫЕ И СОЦИАЛЬНЫЕ АСПЕКТЫ ЗДОРОВЬЯ И ЗДОРОВОГО ОБРАЗА ЖИЗНИ. СОВРЕМЕННАЯ ПОЛИТИКА УКРЕПЛЕНИЯ ЗДОРОВЬЯ НАСЕЛЕНИЯ В РФ
Показать ответ -
В саду растёт 8 кустов малины, это на 5 кустов больше, чем смородины. Сколько кустов смородины растёт в саду?
Показать ответ -
Найдите значение выражения (3/22 + 2/11) : 5/33
Показать ответ -
Choose the correct form: 1. One can (reduce, be reduced) heat losses in a transmission line.
Показать ответ -
На изготовление грузовой машины пошло 23 детали конструктора, а на изготовление подъёмного крана — на 7 деталей больше. Сколько всего деталей пошло на изготовление этих машин?
Показать ответ -
3) Ответьте на вопросы по-немецки 1. Wie heisst du? 2. Wie ist dein Name? 3 Woher kommst du? 4. Wo lebst du? 5. Hast du viele Verwandte? 6. Wann beginnt das Herbstsemester? 7. Aus wie viel Personen besteht deine Familie? 8. Wie viel und welche Zimmer gibt es in euer Wohnung? 4) Переведите предложения 1. В классе делают домашнее задание. 2. Можно взять словарь? 3. Я могу повесить картину на стену.
Показать ответ -
Округлить числа 34,75192, 1,1276, 0,45387, 9943,2106 а) до десятых б) до сотых в) до тысячных
Показать ответ -
Было проведено 9 запусков программы, при которых в качестве значений переменных s и k вводились следующие пары чисел: (9, 0); (10, 10); (18, 9); (22, 4); (27, 3); (12, 9); (29, 2); (4, 2); (3, 3). Сколько было запусков, при которых программа напечатала «YES»?
Показать ответ -
10. Назовите планеты, входящие в состав Солнечной системы. Сравните планеты земной группы с планетами-гигантами. 11. Какая гипотеза происхождения Солнечной системы наиболее предпочтительнее?
Показать ответ