LeetCode150.逆波兰表达式求值——java

题目描述:

示例 1:

输入:tokens = [“2”,“1”,“+”,“3”,“*”] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) *
3) = 9 示例 2:

输入:tokens = [“4”,“13”,“5”,“/”,“+”] 输出:6 解释:该算式转化为常见的中缀算术表达式为:(4 + (13
/ 5)) = 6 示例 3:

输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,““,”/“,””,“17”,“+”,“5”,“+”]
输出:22 解释:该算式转化为常见的中缀算术表达式为: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

解法一:栈

class Solution {
    public int evalRPN(String[] tokens) {
            Stack<Integer> stack=new Stack<>();
            int num1,num2;

            for(int i=0;i<tokens.length;i++)
            {
                if(isNumber(tokens[i]))
                {
                    stack.push(Integer.parseInt(tokens[i]));
                }else
                {
                    num2=stack.pop();
                    num1=stack.pop();
                    switch(tokens[i])
                    {
                        case "+":
                            num1=num1+num2;
                            break;
                        case "-":
                            num1=num1-num2;
                            break;
                        case "*":
                            num1=num1*num2;
                            break;
                        case "/":
                            num1=num1/num2;
                            break;
                    }
                    stack.push(num1);
                }
            }
            return stack.pop();
    }
   public boolean isNumber(String ch)
   {
       return !("+".equals(ch)||"-".equals(ch)||"*".equals(ch)||"/".equals(ch));
   } 

}

解法二:数组模拟栈

class Solution {
    public int evalRPN(String[] tokens) {
          int n=tokens.length;
          int [] stack=new int[(n+1)/2];
          int index=-1;
          for(int i=0;i<n;i++)
          {
              String token=tokens[i];
              switch(token){
                  case "+":
                      index--;
                      stack[index]+=stack[index+1];
                      break;
                case "-":
                    index--;
                    stack[index]-=stack[index+1];
                    break;
                case "*":
                    index--;
                    stack[index]*=stack[index+1];
                    break;
                case "/":
                    index--;
                    stack[index]/=stack[index+1];
                    break;
                default:
                    index++;
                    stack[index]=Integer.parseInt(token);
              }
          }
          return stack[index];
   } 

}

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)