スタック---野球の試合

1936 ワード

  • 題あなたは今野球の記録員です.文字列のリストを指定します.各文字列は、整数(1ラウンドのスコア):このラウンドで得た積分数を直接表します.「+」(1ラウンドの得点):本ラウンドで獲得した得点が前の2ラウンドの有効ラウンドの得点の合計であることを示す.「D」(1ラウンドの得点):本ラウンドで獲得した得点が前ラウンドの有効ラウンドの得点の2倍であることを示す「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。
    
      : ["5","-2","4","C","D","9","+","+"]
      : 27
      : 
     1 :     5 。   :5。
     2 :     -2 。   :3。
     3 :     4 。   :7。
      1: 3      。   :3。
     4 :     -4 (          )。   :-1。
     5 :     9 。   :8。
     6 :     -4 + 9 = 5 。   13。
     7 :     9 + 5 = 14 。   27。
    
  • 入力リストのサイズは、1から1000の間にあることに注意してください.リストの各整数は-3000~30000です.
  • コード実装
  • import java.util.Stack;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Solution {
        public int calPoints(String[] ops) {
            int score = 0;
            Stack stack = new Stack<>();
            for(int i=0;i=2){
                        int temp1 = stack.pop();
                        int temp2 = stack.peek();
                        int num = temp1+temp2;
                        stack.push(temp1);
                        stack.push(num);
                    }
                }
                Pattern pattern = Pattern.compile("-?[0-9]+");
                Matcher matcher = pattern.matcher(ops[i]);
                if(matcher.find()){
                    int num= Integer.valueOf(matcher.group(0));
                    stack.push(num);
                }
            }
            while (!stack.empty()){
                score+=stack.pop();
            }
            return score;
        }
    
    }