Учитывая число n, найдите наименьшее число, которое имеет тот же набор цифр, что и n, и больше, чем n. Если n — максимально возможное число с его набором цифр, выведите «не возможно».
Примеры:
Для простоты реализации мы рассмотрели входной номер в виде строки.
Input: n = "218765" Output: "251678" Input: n = "1234" Output: "1243" Input: n = "4321" Output: "Not Possible" Input: n = "534976" Output: "536479"
Ниже приведены несколько замечаний по поводу следующего большего числа.
1) Если все цифры отсортированы в порядке убывания, то вывод всегда «Не возможно». Например, 4321.
2) Если все цифры отсортированы в порядке возрастания, то нам нужно поменять местами последние две цифры. Например, 1234.
3) В других случаях нам нужно обработать число с правой стороны (почему? Потому что нам нужно найти наименьшее из всех больших чисел)
Теперь вы можете попробовать разработать алгоритм самостоятельно.
Ниже приведен алгоритм поиска следующего большего числа.
I) Пройдите заданное число от крайней правой цифры, продолжайте движение, пока не найдете цифру, которая меньше, чем ранее пройденная цифра. Например, если введено число «534976», мы останавливаемся на 4, потому что 4 меньше следующей цифры 9. Если мы не найдем такую цифру, то вывод «Не возможно».
II) Теперь найдите правую часть найденной цифры «d», чтобы найти наименьшую цифру, превышающую «d». Для «53 4 976» правая часть 4 содержит «976». Наименьшая цифра больше 4 — 6 .
III) Поменяйте местами найденные выше две цифры, мы получим 53 6 97 4 в приведенном выше примере.
IV) Теперь отсортируйте все цифры от позиции рядом с 'd' до конца числа. Число, которое мы получаем после сортировки, является выходным. Для приведенного выше примера мы сортируем цифры жирным шрифтом 536 974 . Мы получаем «536 479 », который является следующим большим числом для ввода 534976.
Ниже приводится реализация вышеуказанного подхода.
|
Джава
|
питон
|
C #
|
Выход:
Next number with same set of digits is 536479
Вышеуказанная реализация может быть оптимизирована следующими способами.
1) Мы можем использовать бинарный поиск на шаге II вместо линейного поиска.
2) На шаге IV вместо простой сортировки мы можем применить некоторую умную технику, чтобы сделать это за линейное время. Подсказка: мы знаем, что все цифры линейно отсортированы в обратном порядке, кроме одной цифры, которая была заменена.
С помощью приведенных выше оптимизаций мы можем сказать, что временная сложность этого метода составляет O (n).
Эта статья пополняемая Рахул Джейна. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Наибольшее число не больше N, все цифры которого нечетные
- Следующее большее число, чем N с тем же количеством цифр A и B
- Следующее большее число на основе старшинства цифр
- Ближайшее большее число, меняя цифры
- Наибольшее число не больше N, которое может стать простым после перестановки его цифр
- Найти среднее значение k цифр от начала и l цифр от конца данного числа
- Подсчитать числа в заданном диапазоне, чтобы сумма четных цифр была больше суммы нечетных цифр
- Найти наименьшее число с заданным количеством цифр и суммой цифр
- Найти наибольшее число с заданным количеством цифр и суммой цифр
- Найти следующий идеальный квадрат больше заданного числа
- Найти количество элементов больше чем k в отсортированном массиве
- Найти число натуральных чисел, меньших или равных N, которые имеют нечетное число цифр
- Найти количество цифр в числе, которое делит число
- Найдите наименьшее число, цифры которого умножаются на данное число n
- Найти максимальное число, которое может быть сформировано, используя цифры данного числа
0.00 (0%) 0 votes