棒球比賽原文鏈接
你現在是棒球比賽記錄員。 給定一個字符串列表,每個字符串可以是以下四種類型之一: 1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。
- "+"(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。
- "D"(一輪的得分):表示本輪獲得的得分是前一輪有效 回合得分的兩倍。
- "C"(一個操作,這不是一個回合的分數):表示您獲得的最後一個有效 回合的分數是無效的,應該被移除。
每一輪的操作都是永久性的,可能會對前一輪和後一輪產生影響。 你需要返回你在所有回合中得分的總和。
示例 1:
輸入: ["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. "+"(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。 3. "D"(一輪的得分):表示本輪獲得的得分是前一輪有效 回合得分的兩倍。 4. "C"(一個操作,這不是一個回合的分數):表示您獲得的最後一個有效 回合的分數是無效的,應該被移除。 每一輪的操作都是永久性的,可能會對前一輪和後一輪產生影響。 你需要返回你在所有回合中得分的總和。 示例 1: 輸入: ["5","2","C","D","+"] 輸出: 30 解釋: 第1輪:你可以得到5分。總和是:5。 第2輪:你可以得到2分。總和是:7。 操作1:第2輪的數據無效。總和是:5。 第3輪:你可以得到10分(第2輪的數據已被刪除)。總數是:15。 第4輪:你可以得到5 + 10 = 15分。總數是:30。 ``` public classs Solution{ public int calPoints(String[] ops) { Stack<Integer> stack=new Stack()<>; for(String op:ops){ if("+".equals(op)){ int top=stack.pop(); int newTop=top+stack.peek(); stack.push(top); stack.push(newTop); }else if("C".equals(op)){ stack.pop(); }else if("D".equals(op)){ stack.push(2*stack.peek()); }else{ stack.push(Integer.valueOf(op)); } } int sum=0; for(int score:stack){ sum+=score; } return sum; } } ```