Решаем задачу calculator на leetcode | JavaScript | Computer Science
Вставка
- Опубліковано 31 тра 2024
- В видео пройдёмся и решим за O(N) задачу с одного собеседования, Calculator.
🍀 Поддержать развитие канала: www.donationalerts.com/r/webe...
✍️ Мой телеграм канал: t.me/webelart
🏰 Английский UA-cam: @webelart_en
💁🏼♀️ Мой инстаграм: / webelart
🦄 LinkedIn: / webelart
Ссылки используемые в уроке:
📹 Оценка сложности алгоритмов: • Оценка сложности алгор...
📹 Учимся использовать стек и очередь в JavaScript: • Учимся использовать ст...
🔗 LeetCode задача - leetcode.com/problems/basic-c...
00:00 Введение.
01:02 Разбираем условие задачи.
06:20 Изучаем алгоритм.
10:50 Пишем код.
18:58 Тестирование.
На канале я рассматриваю различные темы веб-разработки, на текущий момент: веб-основы, веб-анимации, веб-дизайн.
какой же у вас приятный голос и манера речи, слушать одно удовольствие
Елена, спасибо за разбор задачи 🤩 побольше бы таких видео, вы очень хорошо объясняете 👍
мне нравится твоя подача 👍🥰
Гитара у стены - моё почтение😇
Очень интересно!
Елена, спасибо за полезное видео!
Ещё сегодня пришла ваша открытка🎉 Было неожиданно открыть и увидеть там Салазара Слизерина😮😂 Спасибо!!!
Рада, что видео понравилось. Про открытку, крутота! Карточки Гарри Поттера я положила наверно в 2-3 открытки. :)
А мне пришла открыткаааа🎉🎉😂 Ура, ура, ура, Спасибо, Лена🎉🎉🎉
О, крутяк! ☺
Можно ли как-то получить доступ к вашему курсу по алгоритмам, хотел купить? Очень нравится ваша подача
Здравствуйте, Владимир. Пока нет набора на алгоритмы. Если будет, я отпишусь под комментарием. ❤
Это вы заюзали обратную польскую запись, так что ли получается? Если да, то странно как то идею сформулировали, ну или я не очень суть ухватил )
Нет это не обратная польская нотация. Это обычный калькулятор. Польская нотация попроще. Кстати в видео про стек и очередь как раз её решала.
@@webelart значит пересмотрю видео более внимательно. В любом случае, спасибо за видосики )
замечание по терминам - цифра это глиф для десятичного это от 0 до 9 - число(целое во входе ещю и натуральное ) это от 1 и более цифр
Это вы цифре замечание сделали? Вот она на вас теперь обидется и разговаривать не будет. И кляксы в тетрадках ставить будет. Даже и не позавидуешь вам теперь. 🦊
@@webelart сам страдаю
:like:
❤
class Solution:
def calculate(self, s: str) -> int:
s,m,b,z=s.replace(' ','')+'+',[],0,set('*/')
for e in s:
if e not in '*/-+':b=b*10+int(e);continue
len(m) and m[-1] in z and (b:=m.pop()*b if m.pop()=='*' else m.pop()//b)
m.append(b);m.append(e);b=0
return m[0]+sum((-1 if m[p-1]=='-' else 1)*m[p]for p in range(2,len(m),2))
Чё-то сложно написано. Мне алгоритм в видео больше нравится.
@@webelart у вас по факту стандартный парсер скобочного выражение с выкинутыми скобками - и следовательно стеком их вложенностей - исключить отдельную отработку последнего аргумента (который не завершён в отличии от остальных последующим оператором обычно можно обьемлющими скобками :)
спасибо за радость глазу
@@qulinxao Надо будет со скобками решить. Пока не знаю как.
Спасибо за видео и интересную задачу!
Не спешил подсматривать ваше решение, и попробовал решить самостоятельно. Не сразу получилось красиво декомпозировать задачу. Сперва была мысль парсить токены (числа, операторы) в многоуровневый массив (хорошо, что от этой идеи отказался), чтобы уже потом учесть приоритеты операторов. После же некоторых раздумий пришёл таки к практически идентичному решению. Вот, что вышло:
const calculate = function(str) {
const subtotal = [];
let numeric = '';
let sign = '+';
for (const char of str + '=') {
if (char === ' ') {
continue;
}
if (!isNaN(char)) {
numeric += char;
continue;
}
if (sign === '+') {
subtotal.push(+numeric);
}
if (sign === '-') {
subtotal.push(-numeric);
}
if (sign === '*') {
subtotal.push(subtotal.pop() * numeric);
}
if (sign === '/') {
subtotal.push(subtotal.pop() / numeric | 0);
}
numeric = '';
sign = char;
}
return subtotal.reduce((a, b) => a + b, 0);
};
Правда, для удобочитаемости я выбрал цикл for...of и отказался от switch...case. Но ваше решение будет всё же более производительным, та и нейминг переменных в нём мне таки понравился больше. 👍
У меня такое же решение. ❤
Еще кто то заметил чему равно 2+2*2 в превью ?😮😊
А как вы думаете, что там?
@@webelart 2 или 3 :D?
@@vatasi7312 Мимо! 😄 Ещё предложения?
2+2*2@@webelart😂😂😂
@@vatasi7312 Нет :)
Я видимо никогда не буду так разбираться в таком коде...😢 слишком нужно шарить в математике
Из математики здесь только + - * /. Остальное алгоритм. Подписывайтесь на канал и я вас научу! ❤
Лена, у тебя канал называется "Елена Литвинова - Искусство Веб-разработки", а не какой-то там вебеларт
Вебэларт это и есть искусство веб разработки, сокращено. Веб - это веб, el -это часть моего имени. Art - искусство.