682. 棒球比賽

題目:
你現(xiàn)在是一場采特殊賽制棒球比賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以后幾回合的得分。
比賽開始時,記錄是空白的。你會得到一個記錄操作的字符串列表 ops,其中 ops[i] 是你需要記錄的第 i 項操作,ops 遵循下述規(guī)則:
整數(shù) x - 表示本回合新獲得分數(shù) x
"+" - 表示本回合新獲得的得分是前兩次得分的總和。題目數(shù)據(jù)保證記錄此操作時前面總是存在兩個有效的分數(shù)。
"D" - 表示本回合新獲得的得分是前一次得分的兩倍。題目數(shù)據(jù)保證記錄此操作時前面總是存在一個有效的分數(shù)。
"C" - 表示前一次得分無效,將其從記錄中移除。題目數(shù)據(jù)保證記錄此操作時前面總是存在一個有效的分數(shù)。
請你返回記錄中所有得分的總和。

示例 1:
輸入:ops = ["5","2","C","D","+"]
輸出:30
解釋:
"5" - 記錄加 5 ,記錄現(xiàn)在是 [5]
"2" - 記錄加 2 ,記錄現(xiàn)在是 [5, 2]
"C" - 使前一次得分的記錄無效并將其移除,記錄現(xiàn)在是 [5].
"D" - 記錄加 2 * 5 = 10 ,記錄現(xiàn)在是 [5, 10].
"+" - 記錄加 5 + 10 = 15 ,記錄現(xiàn)在是 [5, 10, 15].
所有得分的總和 5 + 10 + 15 = 30

示例 2:
輸入:ops = ["5","-2","4","C","D","9","+","+"]
輸出:27
解釋:
"5" - 記錄加 5 ,記錄現(xiàn)在是 [5]
"-2" - 記錄加 -2 ,記錄現(xiàn)在是 [5, -2]
"4" - 記錄加 4 ,記錄現(xiàn)在是 [5, -2, 4]
"C" - 使前一次得分的記錄無效并將其移除,記錄現(xiàn)在是 [5, -2]
"D" - 記錄加 2 * -2 = -4 ,記錄現(xiàn)在是 [5, -2, -4]
"9" - 記錄加 9 ,記錄現(xiàn)在是 [5, -2, -4, 9]
"+" - 記錄加 -4 + 9 = 5 ,記錄現(xiàn)在是 [5, -2, -4, 9, 5]
"+" - 記錄加 9 + 5 = 14 ,記錄現(xiàn)在是 [5, -2, -4, 9, 5, 14]
所有得分的總和 5 + -2 + -4 + 9 + 5 + 14 = 27

思路一:
因為每次遇到"+"都需要取出前兩個元素,求和,也就是需要滿足后進先出的數(shù)據(jù)結(jié)構(gòu)。
申明一個Stack,用于存放每次值,遇到"+"是,從棧頂取出兩位相加,再放入棧內(nèi),最后把和放入棧內(nèi)。
遇到是"C",移除棧頂元素。遇到"D"棧頂元素*2,入棧。最后把遍歷Stack求和。

代碼如下:

public int calPoints(String[] ops) {
        Stack<Integer> stack = new Stack<Integer>();
        for (int i = 0; i < ops.length; i++) {
            if (ops[i].equals("+")) {
                // 取出棧頂元素,方便取出第二個元素
                int top = stack.pop();
                int newTop = top + stack.peek();
                stack.add(top);
                stack.add(newTop);
            } else if (ops[i].equals("C")) {
                stack.pop();
            } else if (ops[i].equals("D")) {
                stack.add(stack.peek() * 2);
            } else {
                stack.add(Integer.parseInt(ops[i]));
            }
        }
        int sum = 0;
        for (Integer i : stack) {
            sum += i;
        }
        return sum;
    }

-------------------------------小白學算法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目 難度:★★☆☆☆類型:棧 你現(xiàn)在是棒球比賽記錄員。給定一個字符串列表,每個字符串可以是以下四種類型之一:1....
    玖月晴閱讀 559評論 0 0
  • 【題目描述】你現(xiàn)在是棒球比賽記錄員。給定一個字符串列表,每個字符串可以是以下四種類型之一:1.整數(shù)(一輪的得分):...
    1江春水閱讀 191評論 0 0
  • 你現(xiàn)在是棒球比賽記錄員。給定一個字符串列表,每個字符串可以是以下四種類型之一:1.整數(shù)(一輪的得分):直接表示您在...
    小路_閱讀 223評論 0 0
  • 你現(xiàn)在是棒球比賽記錄員。給定一個字符串列表,每個字符串可以是以下四種類型之一:1.整數(shù)(一輪的得分):直接表示您在...
    DAFFE閱讀 192評論 0 0
  • 題目大意 你現(xiàn)在是棒球比賽記錄員。給定一個字符串列表,每個字符串可以是以下四種類型之一:1.整數(shù)(一輪的得分):直...
    不要甜的紅燒肉閱讀 108評論 0 0

友情鏈接更多精彩內(nèi)容