https://leetcode.com/problems/baseball-game | Easy |
---|
Вы ведёте счёт бейсбольной игры. Правила для получения счёта представлены в виде списка строк operations
, где каждая операция имеет одно из следующих значений:
• Целое число (может быть положительным или отрицательным) — добавьте это число в текущий счёт.
• "+"
– добавьте в счёт сумму двух предыдущих результатов.
• "D"
– удвойте предыдущий результат и добавьте его в счёт.
• "C"
– отмените последний результат и удалите его из счёта.
Гарантируется, что после выполнения всех операций счёт будет корректным.
Input:
operations = ["5", "2", "C", "D", "+"]Output:
30Explanation:
"5" - добавляем 5 в счёт. Список очков: [5]. "2" - добавляем 2 в счёт. Список очков: [5, 2]. "C" - отменяем последний результат. Список очков: [5]. "D" - удваиваем последний результат (5 * 2 = 10). Список очков: [5, 10]. "+" - добавляем сумму двух последних результатов (5 + 10 = 15). Список очков: [5, 10, 15]. Итоговый счёт: 5 + 10 + 15 = 30.
Input:
operations = ["5", "-2", "4", "C", "D", "9", "+", "+"]Output:
27Explanation:
"5" - добавляем 5 в счёт. Список очков: [5]. "-2" - добавляем -2 в счёт. Список очков: [5, -2]. "4" - добавляем 4 в счёт. Список очков: [5, -2, 4]. "C" - отменяем последний результат. Список очков: [5, -2]. "D" - удваиваем последний результат (-2 * 2 = -4). Список очков: [5, -2, -4]. "9" - добавляем 9 в счёт. Список очков: [5, -2, -4, 9]. "+" - добавляем сумму двух последних результатов (-4 + 9 = 5). Список очков: [5, -2, -4, 9, 5]. "+" - добавляем сумму двух последних результатов (9 + 5 = 14). Список очков: [5, -2, -4, 9, 5, 14]. Итоговый счёт: 5 + (-2) + (-4) + 9 + 5 + 14 = 27.
Input:
operations = ["1", "C"]Output:
0Explanation:
"1" - добавляем 1 в счёт. Список очков: [1]. "C" - отменяем последний результат. Список очков: []. Итоговый счёт: 0.
fun calPoints(operations: Array<String>): Int {
val stack = mutableListOf<Int>() // Создаём стек для хранения очков
for (op in operations) {
when (op) {
"+" -> {
// Добавляем сумму двух последних очков
val last = stack[stack.size - 1]
val secondLast = stack[stack.size - 2]
stack.add(last + secondLast)
}
"D" -> {
// Удваиваем последнее очко
val last = stack.last()
stack.add(2 * last)
}
"C" -> {
// Удаляем последнее очко
stack.removeAt(stack.size - 1)
}
else -> {
// Добавляем число в стек
stack.add(op.toInt())
}
}
}
return stack.sum() // Возвращаем сумму всех очков
}
O(n), где n — количество операций.