План курса / Все задачи / Алгоритмы и структуры данных
Простой калькулятор
средне
# решено
Дан массив s с положительными числами и знаками * и +. Нужно вернуть результат вычислений и важно, чтобы решение было за O(1) по дополнительной памяти.
Пример 1:
Ввод: s = ["2","*","3","*","1","+","2","+","2","+","2","*","0","*","13","+","1"]
Вывод: 11
Пример 2:
Ввод: s = ["1","+","2","+","3"]
Вывод: 6
Ограничения:
len(s) >= 1
public class Solution
{
public static int Calculate(List<string> s)
{
int result = 0;
// prevMultiply - произведение подряд идущих чисел
int prevMultiply = int.Parse(s[0]);
// Итерируемся по знакам
for (int i = 1; i < s.Count; i += 2)
{
if (s[i] == "*")
{
// При умножении домножаем следующее число на накопленное произведение
prevMultiply *= int.Parse(s[i + 1]);
}
else if (s[i] == "+")
{
// Когда встречаем знак "+", обновляем prevMultiply и прибавляем
// текущее произведение подряд идущих чисел в результат
result += prevMultiply;
prevMultiply = int.Parse(s[i + 1]);
}
}
result += prevMultiply;
return result;
}
}
#include <vector>
#include <string>
using namespace std;
int calculate(const vector<string>& s) {
int result = 0;
// prevMultiply - произведение подряд идущих чисел
int prevMultiply = stoi(s[0]);
// итерируемся по знакам
for (int i = 1; i < s.size(); i += 2) {
if (s[i] == "*") {
// при умножении домножаем следующее число на накопленное произведение
prevMultiply *= stoi(s[i + 1]);
} else if (s[i] == "+") {
// когда встречаем знак "+", обновляем prevMultiply и прибавляем
// текущее произведение подряд идущих чисел в результат
result += prevMultiply;
prevMultiply = stoi(s[i + 1]);
}
}
result += prevMultiply;
return result;
}
package main
import "strconv"
func calculate(s []string) int {
result := 0
// prevMultiply - произведение подряд идущих чисел
prevMultiply, _ := strconv.Atoi(s[0])
// итерируемся по знакам
for i := 1; i < len(s); i += 2 {
if s[i] == "*" {
// при умножении домножаем следующее число на накопленное произведение
nextNum, _ := strconv.Atoi(s[i + 1])
prevMultiply *= nextNum
} else if s[i] == "+" {
// когда встречаем знак "+", обновляем prevMultiply и прибавляем
// текущее произведение подряд идущих чисел в результат
result += prevMultiply
nextNum, _ := strconv.Atoi(s[i + 1])
prevMultiply = nextNum
}
}
result += prevMultiply
return result
}
import java.util.List;
public class Solution {
public int calculate(List<String> s) {
int result = 0;
// prevMultiply - произведение подряд идущих чисел
int prevMultiply = Integer.parseInt(s.get(0));
// итерируемся по знакам
for (int i = 1; i < s.size(); i += 2) {
if (s.get(i).equals("*")) {
// при умножении домножаем следующее число на накопленное произведение
prevMultiply *= Integer.parseInt(s.get(i + 1));
} else if (s.get(i).equals("+")) {
// когда встречаем знак "+", обновляем prevMultiply и прибавляем
// текущее произведение подряд идущих чисел в результат
result += prevMultiply;
prevMultiply = Integer.parseInt(s.get(i + 1));
}
}
result += prevMultiply;
return result;
}
}
from typing import *
def calculate(s: List[str]) -> int:
result = 0
# prev_multiply - произведение подряд идущих чисел
prev_multiply = int(s[0])
i = 0
# итерируемся по знакам
for i in range(1, len(s), 2):
if s[i] == "*":
# при умножении домножаем следующее число на накопленное произведение
prev_multiply *= int(s[i + 1])
elif s[i] == "+":
# когда встречаем знак "+" обновляем prev_multiply и прибавляем
# текущее произведение подряд идущих чисел в результат
result += prev_multiply
prev_multiply = int(s[i + 1])
result += prev_multiply
return result
export function calculate(s) {
let result = 0;
// prev_multiply - произведение подряд идущих чисел
let prev_multiply = parseInt(s[0], 10);
let i = 0;
// итерируемся по знакам
for (i = 1; i < s.length; i += 2) {
if (s[i] === "*") {
// при умножении домножаем следующее число на накопленное произведение
prev_multiply *= parseInt(s[i + 1], 10);
} else if (s[i] === "+") {
// когда встречаем знак "+" обновляем prev_multiply и прибавляем
// текущее произведение подряд идущих чисел в результат
result += prev_multiply;
prev_multiply = parseInt(s[i + 1], 10);
}
}
result += prev_multiply;
return result;
}