и посмотреть медиа
Java | LeetCode
и посмотреть медиа
LeetCode задачи и решения на Java.
LeetCode задачи и решения на Java.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Решения задач LeetCode на Java с акцентом на чистый код и оптимизацию. Темы: массивы, деревья, графы, динамика. Идеально для технической подготовки.
Задача: 772. Basic Calculator III Сложность: medium Реализуйте базовый калькулятор для вычисления простого строкового выражения. Строка выражения содержит только неотрицательные целые числа, операторы '+', '-', '*', '/' и открывающие '(' и закрывающие скобки ')'. Целочисленное деление должно округляться к нулю. Предполагается, что данное выражение всегда корректно. Все промежуточные результаты будут находиться в диапазоне [-2^31, 2^31 - 1]. Примечание: нельзя использовать встроенные функции для вычисления строк как математических выражений, такие как eval(). Пример: Input: s = "1+1" Output: 2 👨💻 Алгоритм: 1⃣Определите вспомогательную функцию evaluate, которая принимает оператор и числовые аргументы. Заметьте, что эта функция идентична той, что представлена в подходе "Basic Calculator II". Инициализируйте несколько переменных: стек для хранения промежуточных результатов, curr для отслеживания текущего числа, которое мы строим, и previousOperator для отслеживания предыдущего оператора. Добавьте в строку s случайный символ, который не будет появляться во входных данных, например "@". 2⃣Итерация по входным данным. Для каждого символа c: если c является цифрой, добавьте его к curr. В противном случае, если c == '(', мы начинаем вычисление нового изолированного выражения. В этом случае сохраните previousOperator в стек и установите previousOperator = "+". 3⃣Если c является оператором, то необходимо вычислить значение curr. Используйте функцию evaluate, чтобы применить previousOperator к curr, и добавьте результат в стек. Затем сбросьте curr до нуля и обновите previousOperator = c. Если c == ')', это означает, что мы находимся в конце изолированного выражения и должны полностью его вычислить. Извлекайте из стека до тех пор, пока не достигнете оператора, суммируя все извлеченные числа в curr. Как только достигнете оператора, обновите previousOperator = stack.pop(). Верните сумму всех чисел в стеке. 😎 Решение: class Solution { private String evaluate(char operator, String first, String second) { int x = Integer.parseInt(first); int y = Integer.parseInt(second); int res = 0; if (operator == '+') { res = x; } else if (operator == '-') { res = -x; } else if (operator == '*') { res = x * y; } else { res = x / y; } return Integer.toString(res); } public int calculate(String s) { Stack stack = new Stack(); String curr = ""; char previousOperator = '+'; s += "@"; Set operators = new HashSet(Arrays.asList("+", "-", "*", "/")); for (char c: s.toCharArray()) { if (Character.isDigit(c)) { curr += c; } else if (c == '(') { stack.push("" + previousOperator); previousOperator = '+'; } else { if (previousOperator == '*' || previousOperator == '/') { stack.push(evaluate(previousOperator, stack.pop(), curr)); } else { stack.push(evaluate(previousOperator, curr, "0")); } curr = ""; previousOperator = c; if (c == ')') { int currentTerm = 0; while (!operators.contains(stack.peek())) { currentTerm += Integer.parseInt(stack.pop()); } curr = Integer.toString(currentTerm); previousOperator = stack.pop().charAt(0); } } } int ans = 0; for (String num: stack) { ans += Integer.parseInt(num); } return ans; } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!
Proveedor Oficial de Servicios de Internet ChannelINTELEKT.NET. Noticias actuales, tarifas y soporte para usuarios📡.
El bot monitorea las publicaciones por palabras clave en los canales.
Vídeo japonés con una historia en alta calidad y subtítulos en chino.