Leetcode刷題07--棒球比賽

AD鈣奶-lalala發表於2020-11-27

Leetcode原題:

你現在是一場採特殊賽制棒球比賽的記錄員。這場比賽由若干回合組成,過去幾回合的得分可能會影響以後幾回合的得分。

比賽開始時,記錄是空白的。你會得到一個記錄操作的字串列表 ops,其中 ops[i] 是你需要記錄的第 i 項操作,ops 遵循下述規則:

整數 x - 表示本回合新獲得分數 x
"+" - 表示本回合新獲得的得分是前兩次得分的總和。題目資料保證記錄此操作時前面總是存在兩個有效的分數。
"D" - 表示本回合新獲得的得分是前一次得分的兩倍。題目資料保證記錄此操作時前面總是存在一個有效的分數。
"C" - 表示前一次得分無效,將其從記錄中移除。題目資料保證記錄此操作時前面總是存在一個有效的分數。
請你返回記錄中所有得分的總和。

 

示例 1:

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

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

輸入:ops = ["1"]
輸出:1

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/baseball-game
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路:見到有移除操作,可以想到棧。

題解:

class Solution {
    public int calPoints(String[] ops) {
        Stack<Integer> stack = new Stack();
        for(int i = 0;i < ops.length;i++){
            String x = ops[i];
            if(x.equals("C")){
                stack.pop();
            }else if(x.equals("D")){
                Integer a = stack.peek();
                stack.push(2*a);
            }else if(x.equals("+")){
                Integer a1 = stack.pop();
                Integer a2 = stack.pop();

                Integer a3 = a1 + a2;

                stack.push(a2);
                stack.push(a1);
                stack.push(a3);
            }else{
                Integer num = Integer.parseInt(x);
                stack.push(num);
            }
        }

        int sum = 0;
        while(!stack.isEmpty()){
            Integer n = stack.pop();
            sum += n;
        }


        return sum;
    }
}

public class MainClass {
    public static String[] stringToStringArray(String input) {
        JsonArray jsonArray = JsonArray.readFrom(line);
        String[] arr = new String[jsonArray.size()];
        for (int i = 0; i < arr.length; i++) {
          arr[i] = jsonArray.get(i).asString();
        }
        return arr;
    }
    
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            String[] ops = stringToStringArray(line);
            
            int ret = new Solution().calPoints(ops);
            
            String out = String.valueOf(ret);
            
            System.out.print(out);
        }
    }
}

 

 

 

相關文章