제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 체크인 이벤트에 참여하고 있습니다. 자세한 이벤트 내용 을 보려면 클릭 하세요 .
주제 설명
이것은 682입니다. 쉬운 난이도 LeetCode의 야구 게임 .
태그 : "시뮬레이션"
당신은 이제 특별 게임 야구 게임의 득점원입니다. 게임은 여러 라운드로 구성되며 지난 라운드의 점수가 이후 라운드의 점수에 영향을 줄 수 있습니다.
게임이 시작되었을 때 기록은 비어 있었습니다. 작업을 기록하는 문자열 목록이 표시됩니다 ops
. 여기서
해야 하는 번호입니다.
작업을ops
수행하려면 다음 규칙을 따르십시오.
- 정수
x
- 이번 라운드에서 얻은 새로운 점수를 나타냅니다.x
"+"
- 이번 라운드에서 획득한 새로운 점수가 이전 두 점수의 합임을 나타냅니다. 항목 데이터는 기록될 때 이 작업 앞에 항상 두 개의 유효한 점수가 있음을 보장합니다."D"
- 이번 라운드에서 획득한 새로운 점수가 이전 점수의 2배임을 나타냅니다. 항목 데이터는 이 작업이 기록되기 전에 항상 유효한 점수가 존재함을 보장합니다."C"
- 이전 점수가 유효하지 않아 기록에서 제거되었음을 나타냅니다. 항목 데이터는 이 작업이 기록되기 전에 항상 유효한 점수가 존재함을 보장합니다.
기록에 있는 모든 점수의 합계를 반환하십시오.
예 1:
输入:ops = ["5","2","C","D","+"]
输出:30
解释:
"5" - 记录加 5 ,记录现在是 [5]
"2" - 记录加 2 ,记录现在是 [5, 2]
"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].
"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30
复制代码
예 2:
输入:ops = ["5","-2","4","C","D","9","+","+"]
输出:27
解释:
"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
复制代码
예 3:
输入:ops = ["1"]
输出:1
复制代码
힌트:
-
为
"C"
、"D"
、"+"
,或者一个表示整数的字符串。整数范围是 - 对于
"+"
操作,题目数据保证记录此操作时前面总是存在两个有效的分数 - 对于
"C"
和"D"
操作,题目数据保证记录此操作时前面总是存在一个有效的分数
模拟
根据题意进行模拟即可。
代码:
class Solution {
static int[] nums = new int[1010];
public int calPoints(String[] ops) {
int n = ops.length, idx = 0;
for (int i = 0; i < n; i++, idx++) {
if (ops[i].equals("+")) nums[idx] = nums[idx - 1] + nums[idx - 2];
else if (ops[i].equals("D")) nums[idx] = nums[idx - 1] * 2;
else if (ops[i].equals("C")) idx -= 2;
else nums[idx] = Integer.parseInt(ops[i]);
}
int ans = 0;
for (int i = 0; i < idx; i++) ans += nums[i];
return ans;
}
}
复制代码
nums = [0 for _ in range(1010)]
class Solution:
def calPoints(self, ops: List[str]) -> int:
idx = 0
for i in range(len(ops)):
if ops[i] == '+':
nums[idx] = nums[idx - 1] + nums[idx - 2]
elif ops[i] == 'D':
nums[idx] = nums[idx - 1] * 2
elif ops[i] == 'C':
idx -= 2
else:
nums[idx] = int(ops[i])
idx += 1
return sum(nums[i] for i in range(idx))
复制代码
- 时间复杂度:
- 空间复杂度:
最后
这是我们「刷穿 LeetCode」系列文章的第 No.682
篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。
이 일련의 기사에서는 문제 해결 아이디어를 설명하는 것 외에도 가장 간결한 코드를 최대한 많이 제공합니다. 일반 솔루션이 포함된 경우 해당 코드 템플릿도 제공됩니다.
학생들이 컴퓨터에서 코드를 디버그하고 제출하는 것을 용이하게 하기 위해 관련 저장소를 만들었습니다. github.com/SharingSour… .
창고 주소에서 일련의 기사 솔루션에 대한 링크, 기사 시리즈의 해당 코드, LeetCode의 원래 질문에 대한 링크 및 기타 선호하는 솔루션에 대한 링크를 볼 수 있습니다.