1. 程式人生 > >leetcode 682 baseball game

leetcode 682 baseball game

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

stack.peek()); //直接獲取當前棧頂分數也就是上一輪得分的二倍作為本輪分數放入棧
}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;//返回總分數。
 }

}