LeetCode笔记—Java语言->递归与栈->682.棒球比赛
栈的简述:
栈:FILO先进后出,后进先出。从哪入从哪出
栈适合解决的问题:可以处理具有完全包含关系的问题(表达式求值,递归,括号匹配,二叉树遍历)。
栈的典型应用场景:
场景一:操作系统中的线程栈
场景二:表达式求值
此题思路
这道题需要我们对要进行的操作进行准确的判断,判断要进行的操作是什么,然后执行相应的操作即可。
因为这道题的操作总是对于最后一到两位数的操作,所以我们选择使用栈。
class Solution {
public int calPoints(String[] ops) {
LinkedList<Integer> score = new LinkedList();//驻村分数的栈
for(int i = 0;i<ops.length;i++){//遍历字符串
switch(ops[i]){//这里我们采用switch进行选择分支操作
case "+":{//当为加号时,只需要把前两个值取出,在压入,再把这两个数值取和压入即可
int b = score.pop();
int a = score.pop();
score.push(a);
score.push(b);
score.push(a+b);
}
break;
case "D":{//D代表当前分数是前一个数的2倍,取出*2在压入,因为peek不会删除元素,所以不需要把前一个数压入
int b = score.peek();
score.push(b*2);
}
break;
case "C":{
score.pop();//弹出最后一个分数
}
break;
default:{
score.push(Integer.parseInt(ops[i]));//走到了这里,就代表输入的是数字,压入即可
}
break;
}
}
int num = 0;
while (score.size()!=0){//将分数加起来
num = num + score.pop();
}
return num;
}
}