leetcode 682 baseball game
阿新 • • 發佈:2018-12-21
package leetcode682;
/**
*
- @author Administrator
- 給定一個字串列表,每個字串可以是以下四種類型之一:
1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。
2. “+”(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。
3. “D”(一輪的得分):表示本輪獲得的得分是前一輪有效 回合得分的兩倍。
4. “C”(一個操作,這不是一個回合的分數):表示您獲得的最後一個有效 回合的分數是無效的,應該被移除。
/
/**
- 輸入: [“5”,“2”,“C”,“D”,"+"]
輸出: 30
解釋:
第1輪:你可以得到5分。總和是:5。
第2輪:你可以得到2分。總和是:7。
操作1:第2輪的資料無效。總和是:5。
第3輪:你可以得到10分(第2輪的資料已被刪除)。總數是:15。
第4輪:你可以得到5 + 10 = 15分。總數是:30。 - 演算法分析:
- 1.對於要儲存前一輪或者前兩輪這個數字的值,要想到棧的思想。想到棧的話,分析入棧和出棧。
- 2.整數直接進棧沒有什麼好說的,遇到c是直接出棧也沒有什麼好說的,當遇到d這個是直接獲取棧頂元素然後棧頂元素2倍壓入棧中
- 3.當遇到+直接彈出2次並且記錄值。
/
import java.util.Stack;
public class Solution {
public int calPoints(String[] ops) {
//1.先建立一個棧
Stack stack = new Stack();//定義一個棧,裡面存放Integer型別的得分。
//2.迴圈這個陣列
for(String s:ops) {
if(s.equals("+")) {//如果是+,本輪得分為前兩輪得分的和。
int one=stack.pop();//
int two=stack.pop();
stack.push(two);//記錄第二個值
stack.push(one);//記錄第一個值
stack.push(one+two); //本輪得分等於前兩輪得分相加
}else if(s.equals(“D”)) {
stack.push(2
}else if(s.equals(“C”)) {//如果是c,則上一輪分數失效。
stack.pop(); //直接移除棧頂的分數,也就是上一輪得分
}else {//其餘情況為數字,直接就是本輪得分
//壓入棧中
stack.push(Integer.parseInt(s));//將遍歷出的字串轉為數字直接入棧作為本輪分數
}
} int ans = 0;//定義一個變數記錄總分 for(int score : stack) ans += score;//遍歷棧,裡面全是每輪的有效分數,全部相加為最後總分。 return ans;//返回總分數。 }
}