J
Java | LeetCode
@easy_java_task6.8K подп.
460просмотров
6.8%от подписчиков
19 марта 2026 г.
statsScore: 506
Задача: 556. Next Greater Element III Сложность: medium Мы можем перемешать строку s, чтобы получить строку t, используя следующий алгоритм: Дано положительное целое число n. Найдите наименьшее целое число, которое имеет точно такие же цифры, как и число n, и больше самого числа n по значению. Если такого положительного целого числа не существует, верните -1. Учтите, что возвращенное число должно помещаться в 32-битное целое число. Если существует допустимый ответ, но он не помещается в 32-битное целое число, верните -1. Пример: Input: n = 12 Output: 21 👨‍💻 Алгоритм: 1⃣Нахождение и перестановка цифр Преобразуйте число n в массив цифр. Найдите первую цифру, которая нарушает убывающий порядок (с конца массива). Назовем её индексом i. Найдите первую цифру, которая больше digits[i-1] (с конца массива). Назовем её индексом j. Поменяйте местами цифры на позициях i-1 и j. 2⃣Обратный порядок оставшихся цифр Обратный порядок части массива от индекса i до конца, чтобы получить наименьшую перестановку, которая больше исходной. 3⃣Проверка результата и преобразование обратно в число Преобразуйте массив цифр обратно в число. Если число превышает 32-битный предел, верните -1. В противном случае верните полученное число. 😎 Решение: import java.util.ArrayList; import java.util.Collections; public class Solution { public String swap(String s, int i0, int i1) { if (i0 == i1) return s; String s1 = s.substring(0, i0); String s2 = s.substring(i0 + 1, i1); String s3 = s.substring(i1 + 1); return s1 + s.charAt(i1) + s2 + s.charAt(i0) + s3; } ArrayList<String> list = new ArrayList<>(); void permute(String a, int l, int r) { int i; if (l == r) list.add(a); else { for (i = l; i <= r; i++) { a = swap(a, l, i); permute(a, l + 1, r); a = swap(a, l, i); } } } public int nextGreaterElement(int n) { String s = "" + n; permute(s, 0, s.length() - 1); Collections.sort(list); int i; for (i = list.size() - 1; i >= 0; i--) { if (list.get(i).equals("" + n)) break; } return i == list.size() - 1 ? -1 : Integer.parseInt(list.get(i + 1)); } } Ставь 👍 и забирай 📚 Базу знаний
460
просмотров
2360
символов
Да
эмодзи
Нет
медиа

Другие посты @easy_java_task

Все посты канала →
Задача: 556. Next Greater Element III Сложность: medium Мы м — @easy_java_task | PostSniper